file结构

file结构是设备驱动程序所使用的另一个重要的数据结构,它代表一个“打开的文件”,是应用程序在进行open()调用时由内核创建的,在进行close()调用时作为参数传递给函数以关闭相应的文件。在文件关闭后,内核释放这个数据结构。file结构也在include/linux/fs.h中定义。

 

include/linux/fs.h

519    struct file{

520       struct list_head           f_list;

521       struct dentry             *f_dentry;

522       struct vfsmount           *f_vfsmnt;

523       struct file_operations       *f_op;

524       atomic_t     f_count;

525       unsigned int  f_flags;

526       mode_t   f_mode;

527       loff_t     f_pos;

528       unsigned long     f_reada,f_ramax,f_ralen,f_rawin;

529       struct fown_struct     f_owner;

530       unsigned int       f_uid,f_gid;

531       int        f_error;

532

533       unsigned long           f_version;

534

535      /*needed   for   ttry driver,and maybe others*/

536      void *private_data;

537     

538     /*preallocated helper kiobuf to speedup O_DIRECT*/

539     struct kiobuf        *f_iobuf;

540     long f_iobuf_lock;

541     };

 

由于驱动程序不填写file结构,只是简单地访问其他地方创建的结构,因此常用的并不多,下面介绍驱动程序常用的成员:

1.       f_mode

该成员表示文件的读写权限,由FMODE_READ和FMODE_WRUTE标识。驱动程序的ioctl()方法可能需要查看这个域来检查读写权限。由于内核在调用驱动程序的read()和write()方法已检查了权限,因此read()和write()方法无需检查读写权限。

2.       f_ops

该成员表示文件的当前读/写位置。驱动程序科直接读写该字段。

3.       f_flags

该成员是文件标志,如O_RDONLY、O_NONBLOCK、O_SYNC,所有这些标志都在include/linux/fcntl.h中定义。标志O_NONBLOCK表示是否是请求非阻塞型操作,可由驱动程序检查,其他标志很少使用,需要注意的是,读写权限的检查应该看f_mode成员而不是f_flags成员。

4.       f_inode

该成员是设备文件对应的i结点。驱动程序除了可以通过对该字段从设备号外一般不适用该字段。

5.       f_op

该成员表示与文件关联。内核在完成open()时对这个指针赋值,以后需要分派操作时就读这些数据。file->f_op中的值从不保存共以后引用,因此可在需要时修改文件所对应的操作,下一次再操作那个打开文件的相关操作时会调用新方法。这种技巧有助于在不增加系统调用负担的情况下方便识别主设备号相同的设备。

6.       private_data

系统调用open()在调用驱动程序的open()方法之前将这个指针置为NULL。驱动程序可将这个字段用于任意目的或者简单忽略这个字段,驱动程序可用这个字段指向已分配的数据,但一定要在内核释放file结构前的release()方法中清除它。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值