|
发表于 2008-5-20 11:35:00
|
显示全部楼层
结构file是用来保存打开文件的信息,可以通过文件描述符查找文件描述符数组fd_array(于files_struct结构中)得到file结构。f_flags 是文件的标志。f_modes是文件的打开模式。open是由sys_open(在fs/open.c中)实现的。其中有一行代码:
struct file *f= filp_open(tmp,flags,mode); ##flags,mode是open传进来的
在filp_open中又调用了open_namei(fn,namei_flags,mode,&nd)、dentry_open函数。dentry_open对路径进行解析,找到要访问文件的索引节点,得到nameidata结构nd。它实际上是打开操作中的主要函数,在fs/namei.c中,其实具体实现在这里就不多说了,不然离题了,mode的相关操作就是这里面完成的。dentry_open返回一个指向struct file的指针f,在函数中对f进行分配、赋值,在fs/open.c中:
struct file *f;
.
.
.
f = get_empty_filp(); ##分配
if(!f)
....
f->f_flags = flags;
f->f_mode = (flags+1) & O_ACCMODE;
.
.
. |
|