1. struct file
struct file 结构体在 include/linux/fs.h 中定义。文件结构体代表一个打开的文件,系统中每个打开的文件在内核空间都有一个关联的 struct file。它由内核在打开文件时创
建,并传递给在文件上进行操作的任何函数。在文件的所有实例都关闭后,内核释放这个数据结构。在内核创建和驱动源码中,struct file 的指针通常被命名为 file 或 filp 。
下面我们来展示 struct file 最重要的成员:
1)mode_t f_mode
文件模式确定文件是可读的或者可写的(或者都是),通过 位FMODE_READ和 FMODE_WRITE。
2)loff_t f_pos
当前读写位置, loff_t 在所有平台都是 64 位( 在 gcc术语里是 long long)。 驱动可以读这个值,如果它需要知道文件中的当前位置,但是正常地不应该改变它;读和写应当使用它们作为最后参数而收到的指针来更新一个位置,代替直接作用于 filp->f_pos。这个规则的一个例外是在 lseek 方法中,它的目的就是改变文件位置。
3)unsigned int f_flags
这些是文件标志,例如 O_RDONLY,O_NONBLOCK,和 O_SYNC。驱动应当检查 O_NONBLOCK 标志来看是否是请求非阻塞操作;其他标志很少使用。特别地,应当检查读/写许可,使用 f_mode 而不是 f_flags。所有的标志在头文件 <linux/fcntl.h> 中定义。
4)struct file_operatio