struct file 结构体

struct file 结构体

ID:47487558

大小:34.00 KB

页数:3页

时间:2020-01-12

struct file 结构体_第1页
struct file 结构体_第2页
struct file 结构体_第3页
资源描述:

《struct file 结构体》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、struct file 结构体 (转)(2011-02-1719:11:25)转载标签:杂谈分类:Linux驱动学习在file_operations结构体中,会看到许多函数指针所指向的函数都必须传进structfile结构体指针structfile*作为参数。structfile结构体定义在中,完整如下:引用structfile{              union{               structlist_head       fu_list;               structrcu

2、_head        fu_rcuhead;       }f_u;       structpath            f_path;#definef_dentry       f_path.dentry#definef_vfsmnt       f_path.mnt       conststructfile_operations   *f_op;       spinlock_t             f_lock;       atomic_long_t          f_count;       unsi

3、gnedint           f_flags;       fmode_t                f_mode;       loff_t                 f_pos;       structfown_struct     f_owner;       conststructcred      *f_cred;       structfile_ra_state   f_ra;       u64                    f_version;#ifdefCONFIG_SECURITY

4、       void                   *f_security;#endif              void                   *private_data;#ifdefCONFIG_EPOLL              structlist_head       f_ep_links;#endif       structaddress_space   *f_mapping;#ifdefCONFIG_DEBUG_WRITECOUNT       unsignedlongf_mnt_wri

5、te_state;#endif};在设备驱动中,structfile结构体也是一个非常重要的数据结构。注意的是,这里的file和应用程序中的FILE流指针没有什么关系,FILE定义在C库中,它永远不会出现在内核代码中。filestructure结构代表一个打开的文件(openfile).(打开的文件并没有确切的指定到哪个设备驱动,实际上每个打开的文件都与内核空间中的structfile结构相关联)。filestructure结构在调用open打开一个文件时由内核创建,并会被传递给任一个对这个打开文件进行操作的函数;当所有事情都做

6、完后,会调用close()关闭掉文件,此时内核释放这个数据结构。一般地,在内核源码中,structfile结构体的指针往往写成filp。structfile中的几个重要成员:mode_tf_mode;文件模式根据FMMODE_READ和FMODE_WRITE位来识别文件是否可读或可写,或是可读可写。在read()和write()系统调用中,没有必要对此权限进行检查,因为内核已经在你的系统调用之前已经做了检查。如果文件没有相应的读或写权限,那么如果尝试读写都将被拒绝,驱动程序甚至对此情况毫无知觉。loff_tf_pos;此变量表示

7、当前的文件读写位置。loff_t在所有的平台上都是64位的变量(longlong型,gcc专用术语)。驱动程序如果想知道当前在文件中所处位置,那么可以通过读取此变量得知,但是一般地不应直接对此进行更改。通过llseek()方法可以改变文件位置。unsignedintf_flags;这是表示如O_RDONLY,O_NONBLOCK与O_SYNC这样的标志。一个驱动程序应该检查O_NONBLOCK标志,以查看是否有非阻塞操作的请求。其它的标志用得比较少。需要注意的是,检查read/write权限应该是通过检查f_mode得到而不是f

8、_flags。所有的标志定义在头文件linux/fcntl.h中可以看到。structfile_operations*f_op;内核安排这个指针作为它的open实现的一部分,当需要分派什么操作时,会读取它。filp->f_op因为不会被内核保存起来以在其后之用,

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。