檔案系統原始碼分析之普通檔案讀寫

2021-09-10 01:12:02 字數 3094 閱讀 3709

檔案讀寫主要是通過inode結構裡的資料,讀取或者寫入到底層的硬碟中,並更新相應的屬性。

/*

* linux/fs/read_write.c

* * (c) 1991 linus torvalds

*/#include

#include

#include

#include

#include

#include

extern

intrw_char

(int rw,

int dev,

char

* buf,

int count, off_t * pos)

;extern

intread_pipe

(struct m_inode * inode,

char

* buf,

int count)

;extern

intwrite_pipe

(struct m_inode * inode,

char

* buf,

int count)

;extern

intblock_read

(int dev, off_t * pos,

char

* buf,

int count)

;extern

intblock_write

(int dev, off_t * pos,

char

* buf,

int count)

;extern

intfile_read

(struct m_inode * inode,

struct file * filp,

char

* buf,

int count)

;extern

intfile_write

(struct m_inode * inode,

struct file * filp,

char

* buf,

int count)

;int

sys_lseek

(unsigned

int fd,off_t offset,

int origin)

return file->f_pos;

}int

sys_read

(unsigned

int fd,

char

* buf,

int count)

printk

("(read)inode->i_mode=%06o\n\r"

,inode->i_mode)

;return

-einval;

}int

sys_write

(unsigned

int fd,

char

* buf,

int count)

/*

* linux/fs/file_dev.c

* * (c) 1991 linus torvalds

*/#include

#include

#include

#include

#include

#define min(a,b) (((a)<(b))?(a):(b))

#define max(a,b) (((a)>(b))?(a):(b))

intfile_read

(struct m_inode * inode,

struct file * filp,

char

* buf,

int count)

else

bh =

null

;// 偏移

nr = filp->f_pos % block_size;

// 讀進來的資料中,可讀的長度和還需要讀的長度,取小的,如果還沒讀完繼續把塊從硬碟讀進來

chars =

min( block_size-nr , left )

; filp->f_pos +

= chars;

// 更新偏移指標

left -

= chars;

// 更新還需藥讀取的長度

if(bh)

else

}// 更新訪問時間

inode->i_atime = current_time;

// 返回讀取的長度,如果乙個都沒讀則返回錯誤

return

(count-left)

?(count-left)

:-error;

}int

file_write

(struct m_inode * inode,

struct file * filp,

char

* buf,

int count)

i += c;

// 更新已經寫入的長度

while

(c--

>0)

*(p++)=

get_fs_byte

(buf++);

brelse

(bh);}

inode->i_mtime = current_time;if(

!)return

(i?i:-1

);}

static

void

cp_stat

(struct m_inode * inode,

struct stat * statbuf)

intsys_stat

(char

* filename,

struct stat * statbuf)

// 通過檔案描述符,最終都是需要找到inode

intsys_fstat

(unsigned

int fd,

struct stat * statbuf)

檔案系統原始碼分析之inode c

inode.c主要是管理檔案系統中inode結構的,功能包括,把硬碟的inode讀入內容,把記憶體的inode內容寫入硬碟,或記憶體的inode表中獲取乙個空的或者指定的inode,生成乙個管道的inode,查詢inode中的某個塊,或者在inode中生成新的塊。linux fs inode.c c...

C 原始碼學習之 監控檔案系統

說明 建立windows應用程式,在e盤上建立資料夾wang using system using system.collections.generic using system.componentmodel using system.data using system.drawing using ...

uboot修改原始碼之支援燒寫檔案系統

燒寫檔案系統 tftp 30000000 fs mini mdev.jffs2 nand erase.part root nand write.jffs2 30000000 260000 5b89a8 啟動之前修改啟動引數 set bootargs console ttysac0 root dev ...