檔案讀寫主要是通過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 ...