核心中對檔案的讀寫操作

2022-09-19 20:51:13 字數 1017 閱讀 3977

在專案中,需要在核心裡讀取檔案內容到記憶體中,需要用到的函式有:

struct file *filp_open(const

char *filename, int

flags, umode_t mode)

int filp_close(struct file *filp, fl_owner_t id)

static inline struct inode *file_inode(const

struct file *f)

ssize_t vfs_read(struct file *file, char __user *buf, size_t count, loff_t *pos)

函式的具體不再贅述,直接上**:

/*

引數:檔名

*返回值:buf

*/char ****x_fileread(const

char *filename)

/*使用inode獲取檔案大小

*/inode =file_inode(fp);

fsize = inode->i_size;

/*開闢記憶體空間

*/char *buf = (char *) kzalloc(fsize + 1

, gfp_kernel);

/*使用vfs_read對檔案進行讀取

*/old_fs =get_fs();

set_fs(get_ds());

len = vfs_read(file, buf, fsize, &(fp->f_pos));

set_fs(old_fs);

if(len > 0

) fp->f_ops +=len;

return

buf;

}

許多出錯判斷還需要加上,這裡暫時沒有加。

這裡只是單純的從檔案開頭讀取檔案大小個位元組,然後更新檔案指標,若需要從某個位置進行讀取只需&(fp->f_ops + offset)即可

核心中讀寫檔案

在使用者態,可以使用open,close,read,write等系統呼叫來訪問檔案。那麼核心中呢?使用filp open等函式進行操作,但是這些操作又有些需要注意的地方。在實際應用中,我們可以把系統執行的一些狀態記錄到記憶體中,但記憶體畢竟小,而且在系統重啟後,資料會丟失。那麼是否可以在核心中開啟乙...

對檔案的讀寫操作

c c 寫入 讀出文字檔案 string filename c i.txt streamreader sr new streamreader filename string str sr.readline sr.close rw.writeline 寫入 rw.writeline abc rw.wr...

在linux核心中讀寫檔案

1.序曲 在使用者態,讀寫檔案可以通過read和write這兩個系統呼叫來完成 c庫函式實際上是對系統呼叫的封裝 但是,在核心態沒有這樣的系統呼叫,我們又該如何讀寫檔案呢?閱讀linux核心原始碼,可以知道陷入核心執行的是實際執行的是sys read和sys write這兩個函式,但是這兩個函式沒有...