file结构体中的重要字段
来源:互联网 发布:易语言源码图标 编辑:程序博客网 时间:2024/06/05 02:03
struct file结构体定义在include/linux/fs.h中定义。文件结构体代表一个打开的文件,系统中的每个打开的文件在内核空间都有一个关联的 struct file。它由内核在打开文件时创建,并传递给在文件上进行操作的任何函数。在文件的所有实例都关闭后,内核释放这个数据结构。在内核创建和驱动源码中,struct file的指针通常被命名为file或filp。
下面说一下file结构体中的几个重要成员:
1、mode_t f_mode;
文件模式确定文件是可读的或者是可写的(或者都是), 通过位 FMODE_READ 和FMODE_WRITE. 你可能想在你的 open 或者 ioctl 函数中检查这个成员的读写许可, 但是不需要检查读写许可, 因为内核在调用你的方法之前检查. 当文件还没有为那种存取而打开时读或写的企图被拒绝, 驱动甚至不知道这个情况.
2、loff_t f_pos;
当前读写位置. loff_t 在所有平台都是 64 位( 在 gcc 术语里是 long long ). 驱动可以读这个值,如果它需要知道文件中的当前位置, 但是正常地不应该改变它; 读和写应当使用它们作为最后参数而收到的指针来更新一个位置, 代替直接作用于 filp->f_pos. 这个规则的一个例外是在 llseek 方法中, 它的目的就是改变文件位置.
3、unsigned int f_flags;
这些是文件标志, 例如 O_RDONLY, O_NONBLOCK, 和 O_SYNC. 驱动应当检查O_NONBLOCK 标志来看是否是请求非阻塞操作; 其他标志很少使用. 特别地, 应当检查读/写许可, 使用 f_mode 而不是f_flags.
4.struct file_operations *f_op;
和文件关联的操作. 内核安排指针作为它的open 实现的一部分, 接着读取它当它需要分派任何的操作时. filp->f_op 中的值从不由内核保存为后面的引用; 这意味着你可改变你的文件关联的文件操作, 在你返回调用者之后新方法会起作用. 例如, 关联到主编号 1 (/dev/null, /dev/zero, 等等)的 open 代码根据打开的次编号来替代 filp->f_op 中的操作. 这个做法允许实现几种行为, 在同一个主编号下而不必在每个系统调用中引入开销. 替换文件操作的能力是面向对象编程的”方法重载”的内核对等体.
5.void *private_data;
open 系统调用设置这个指针为 NULL, 在为驱动调用 open 方法之前. 你可自由使用这个成员或者忽略它; 你可以使用这个成员来指向分配的数据, 但是接着你必须记住在内核销毁文件结构之前, 在 release 方法中释放那个内存. private_data 是一个有用的资源, 在系统调用间保留状态信息, 我们大部分例子模块都使用它.
6.struct dentry *f_dentry;
关联到文件的目录入口( dentry )结构. 设备驱动编写者正常地不需要关心 dentry 结构, 除了作为 filp->f_dentry->d_inode 存取 inode 结构.
- file结构体中的重要字段
- Linux下FILE结构体字段详解
- 结构体中的位字段
- linux中task_struct结构体中的字段
- 结构中的位字段
- Linux中的file结构体解析
- C语言中的FILE结构体
- 字符设备驱动框架2:设备文件(设备节点)如何和驱动建立联系-Linux字符设备中的两个重要结构体(file、inode)
- file结构中的private_data
- file结构中的private_data
- file结构中的private_data
- madwifi重要结构体
- 字符驱动设备中几个重要的结构体(cdev,file_operations,inode,file)
- Ogre场景结构体系中的重要函数
- ffmpeg中的重要结构和数据
- Ogre场景结构体系中的重要函数
- Ogre场景结构体系中的重要函数
- C语言-对一个结构体中的字段进行排序
- Activity的启动模式
- C编程的细节(1)
- 从 setNeedsLayout 说起
- 困兽之斗--乐视2017暑期实习生笔试题(二)
- ios中的初始化函数
- file结构体中的重要字段
- 安装oracle rac 11g 在运行图形化之前的准备
- python opencv 读取视频文件并保存
- 快速幂
- 让Spark如虎添翼的Zeppelin – 基础篇
- 个人工作一年的一些经验
- c++基础
- laravel 数据库操作
- Windows下Nexus 5 改user模式为debug模式