在專案中,需要在核心裡讀取檔案內容到記憶體中,需要用到的函式有:
struct file *filp_open(constchar *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這兩個函式,但是這兩個函式沒有...