LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1696|回复: 2

linux driver 的struct file ?

[复制链接]
发表于 2008-5-13 20:47:24 | 显示全部楼层 |阅读模式
struct file {...}
中的
mode_t                    f_mode; // 文件模式

unsigned int              f_flags;
分别是做什么作用的?
<linux device driver>中说的不太清楚

他和用户空间的
open(fd, flag, mode)   中的参数  有什么关系么?
发表于 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;
.
.
.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-5-23 21:09:40 | 显示全部楼层
明白  谢谢兄弟
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表