linux设备驱动第三版笔记---->linux驱动重要数据结构之struct file
来源:互联网 发布:unity3d ui 动画 编辑:程序博客网 时间:2024/05/16 19:51
struct file --><linux/fs.h>
注意:struct file 与应用空间的FILE指针的区别
1、FILE指针定义在C库中,不在内核空间出现
2、struct file是内核结构,不在用户程序也就是用户空间出现
文件结构代表一个打开的文件而不特定给设备驱动; 系统中每个打开的文件有一个关联的 struct file 在内核空间它由内核在 open 时创建, 并传递给在文件上操作的任何函数, 直到最后的关闭. 在文件的所有实例都关闭后, 内核释放这个数据结构。
在内核源码中, struct file 的指针常常称为 file 或者 filp,file 指的是结构, 而 filp 是结构指针
mode_t f_mode;
文件模式确定文件是可读的或者是可写的(或者都是), 通过位 FMODE_READ 和 FMODE_WRITE.
你不需要检查读写许可, 因为内核在调用你的方法之前检查. 当文件还没有为那种存取而打开时读或写的企图被拒绝, 驱动甚至不知道这个情况.
loff_t f_pos;
当前读写位置. loff_t 在所有平台都是 64 位( 在 gcc 术语里是 long long ). 驱动可以读这个值, 如果它需要知道文件中的当前位置, 但是正常地不应该改变它;
读和写应当使用它们作为最后参数而收到的指针来更新一个位置, 代替直接作用于 filp->f_pos. 这个规则的一个例外是在 llseek 方法中, 它的目的就是改变文件位置.
unsigned int f_flags;---à <linux/fcntl.h>
这些是文件标志, 例如 O_RDONLY, O_NONBLOCK, 和 O_SYNC. 驱动应当检查 O_NONBLOCK 标志来看是否是请求非阻塞操作; 其他标志很少使用. 特别地,应当检查读/写许可, 使用 f_mode 而不是 f_flags.
struct file_operations *f_op;
和文件关联的操作. 内核安排指针作为它的 open 实现的一部分, 接着读取它当它需要分派任何的操作时. filp->f_op 中的值从不由内核保存为后面的引用; 这意味着你可改变你的文件关联的文件操作, 在你返回调用者之后新方法会起作用. 例如, 关联到主编号 1 (/dev/null, /dev/zero, 等等)的 open 代码根据打开的次编号来替代 filp->f_op 中的操作. 这个做法允许实现几种行为, 在同一个主编号下而不必在每个系统调用中引入开销. 替换文件操作的能力是面向对象编程的"方法重载"的内核对等体.
void *private_data;
open 系统调用设置这个指针为 NULL, 在为驱动调用 open 方法之前. 你可自由使用这个成员或者忽略它; 你可以使用这个成员来指向分配的数据, 但是接着你必须记住在内核销毁文件结构之前, 在 release 方法中释放那个内存. private_data 是一个有用的资源, 在系统调用间保留状态信息, 我们大部分例子模块都使用它.
struct dentry *f_dentry;
关联到文件的目录入口( dentry )结构. 设备驱动编写者正常地不需要关心 dentry 结构, 除了作为 filp->f_dentry->d_inode 存取 inode 结构.
- linux设备驱动第三版笔记---->linux驱动重要数据结构之struct file
- linux设备驱动第三版笔记---->linux驱动重要数据结构之file_operations
- linux设备驱动第三版笔记---->linux驱动重要数据结构之inode.
- Linux 设备驱动--- struct cdev
- linux设备驱动中重要的3个数据结构
- Linux设备驱动模型之底层数据结构
- Linux设备驱动模型之底层数据结构
- Linux设备驱动模型之底层数据结构
- 《Linux驱动开发详解》——LCD设备驱动重要数据结构及驱动框架
- 《Linux驱动开发详解》——LCD设备驱动重要数据结构及驱动框架
- 【linux驱动笔记】字符设备驱动相关数据结构与算法
- Linux设备驱动程序(第三版)学习之字符驱动(二)
- linux设备驱动笔记
- Linux设备驱动第三版(中文版)
- Linux Kernel设备驱动模型之struct kset
- Linux Kernel设备驱动模型之struct kobj_type
- Linux Kernel设备驱动模型之struct kobj_attribute
- Linux Kernel设备驱动模型之 struct bus_type
- 惠普将103亿收购Autonomy公司 或剥离PC
- 2094 平衡女生——弱弱版
- 2095 平衡女生——小强版
- 不可或缺的LTO磁带存储
- google map系列教程的地址
- linux设备驱动第三版笔记---->linux驱动重要数据结构之struct file
- 2097 LIS
- 今天我也遇到这个问题----ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源 ,收藏一下解决方法
- Button控件的OnClientClick与验证控件冲突的问题
- 关于做Android+J2ee系统集成开发的一点心得
- StageFright框架流程解读
- linux设备驱动学习(2) 构造和运行模块
- 高仿真PLC的工业控制板制作的原理与研发经验(上)
- IT&快消