亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 4538 | 回復(fù): 2
打印 上一主題 下一主題

file_open函數(shù)的使用問題 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2012-11-30 10:13 |只看該作者 |倒序瀏覽
本帖最后由 Gen216ius 于 2012-12-14 08:40 編輯

大家好,有個問題請教你!!先謝謝大家了!

關(guān)于filp_open函數(shù)在kernel內(nèi)核中執(zhí)行,代碼如下。

執(zhí)行后,打印LOG都正常, 但是在根目錄下的test.txt文件中沒有程序所寫的數(shù)據(jù)。不管所要寫入的文件是否存在,結(jié)果都一樣,就是沒有看到相應(yīng)的文件或所寫內(nèi)容沒有寫到相應(yīng)的文件中,但讀出來的數(shù)據(jù)與進(jìn)去的數(shù)據(jù)是一樣的。是什么原因會導(dǎo)致這樣的結(jié)果啊。恐x謝!

#define __KERNEL_SYSCALLS__
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/fs.h>
#include <asm/uaccess.h>
#include <linux/mm.h>
#include <linux/slab.h>



#define KERNEL_LOCALFLAG 1
#include <mydebug.h>



void fileread(const char * filename)
{
        struct file        *filp; //  文件結(jié)構(gòu)體代表一個打開的文件
        struct inode     *inode; //內(nèi)核中用inode結(jié)構(gòu)表示具體的文件,而用file結(jié)構(gòu)表示打開的文件描述符
        mm_segment_t       fs;
        /*其中:
         typedef struct {
         unsigned long seg;
         } mm_segment_t;
         */
         

        off_t   fsize;
        char    *buf;
        unsigned long  magic;
        KERNEL_DEBUG("start....\n");
        filp=filp_open(filename, O_RDWR, 0);          //文件結(jié)構(gòu)
        KERNEL_DEBUG("open return=%ld\n", IS_ERR(filp));
        inode=filp->f_dentry->d_inode;                          //和具體文件聯(lián)系一起

        magic=inode->i_sb->s_magic;                        //
        KERNEL_DEBUG("file system magic:%li \n",magic);
        KERNEL_DEBUG("super blocksize:%li \n",inode->i_sb->s_blocksize);
        KERNEL_DEBUG("inode %li \n",inode->i_ino);

        fsize=inode->i_size;
        KERNEL_DEBUG("file size:%i \n",(int)fsize);
        buf=(char *) kmalloc(fsize+1,GFP_ATOMIC);    //

        fs=get_fs();
        set_fs(KERNEL_DS);
        filp->f_op->read(filp,buf,fsize,&(filp->f_pos));
        set_fs(fs);
        buf[fsize]='\0';
        KERNEL_DEBUG("The File Content is:\n");
        KERNEL_DEBUG("%s",buf);
        filp_close(filp,NULL);

}

void filewrite(char* filename, char* data)
{
        struct file *filp;
        mm_segment_t fs;
        filp = filp_open(filename, O_RDWR | O_CREAT, 0644);
        if(IS_ERR(filp))
        {
                KERNEL_DEBUG("open error...%ld\n", IS_ERR(filp));
                return;
        }   
        KERNEL_DEBUG("open return=%ld\n", IS_ERR(filp));
        fs=get_fs();
        set_fs(KERNEL_DS);
        filp->f_op->write(filp, data, strlen(data),&filp->f_pos);
        set_fs(fs);
        filp_close(filp,NULL);
}

int __init hello_init(void)
{

        char *filename="test.txt";
        KERNEL_DEBUG("write data to File.\n");
        filewrite(filename, "kernel write test\n");//寫數(shù)據(jù)

        KERNEL_DEBUG("Read File from Kernel.\n");
        fileread(filename); //讀數(shù)據(jù)
        return 0;
}

void __exit hello_exit(void)
{
        KERNEL_DEBUG("Good,Bye!\n");
}


module_init(hello_init);
module_exit(hello_exit);


論壇徽章:
0
2 [報告]
發(fā)表于 2012-11-30 10:42 |只看該作者
本帖最后由 Gen216ius 于 2012-11-30 12:55 編輯

大家?guī)兔纯,謝謝了!

論壇徽章:
0
3 [報告]
發(fā)表于 2012-12-14 08:41 |只看該作者
大家有遇到這樣的情況嗎!?
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP