- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
file_operations结构体详细分析.doc
file_operations结构体详细分析
第一个 file_operations 成员根本不是一个操作; 它是一个指向拥有这个结构的模块的指针.这个成员用来在它的操作还在被使用时阻止模块被卸载. 几乎所有时间中, 它被简单初始化为 THIS_MODULE, 一个在 linux/module.h 中定义的宏.这个宏比较复杂,在进行简单学习操作的时候,一般初始化为THIS_MODULE。loff_t (*llseek) (struct file * filp , loff_t p, int orig);(指针参数filp为进行读取信息的目标文件结构体指针;参数 p 为文件定位的目标偏移量;参数orig为对文件定位的起始地址,这个值可以为文件开头(SEEK_SET,0,当前位置(SEEK_CUR,1),文件末尾(SEEK_END,2))llseek 方法用作改变文件中的当前读/写位置, 并且新位置作为(正的)返回值.loff_t 参数是一个long offset, 并且就算在 32位平台上也至少 64 位宽. 错误由一个负返回值指示.如果这个函数指针是 NULL, seek 调用会以潜在地无法预知的方式修改 file 结构中的位置计数器( 在file 结构 一节中描述).ssize_t (*read) (struct file * filp, char __user * buffer, size_t??? size , loff_t * p);(指针参数 filp 为进行读取信息的目标文件,指针参数buffer 为对应放置信息的缓冲区(即用户空间内存地址),参数size为要读取的信息长度,参数 p 为读的位置相对于文件开头的偏移,在读取信息后,这个指针一般都会移动,移动的值为要读取信息的长度值)这个函数用来从设备中获取数据. 在这个位置的一个空指针导致 read 系统调用以 -EINVAL(Invalid argument) 失败.一个非负返回值代表了成功读取的字节数( 返回值是一个 signed size 类型, 常常是目标平台本地的整数类型).ssize_t (*aio_read)(struct kiocb * , char __user * buffer, size_t size , loff_t?? p);可以看出,这个函数的第一、三个参数和本结构体中的read()函数的第一、三个参数是不同 的,异步读写的第三个参数直接传递值,而同步读写的第三个参数传递的是指针,因为AIO从来不需要改变文件的位置。异步读写的第一个参数为指向kiocb结构体的指针,而同步读写的第一参数为指向file结构体的指针,每一个I/O请求都对应一个kiocb结构体);初始化一个异步读 -- 可能在函数返回前不结束的读操作.如果这个方法是 NULL, 所有的操作会由 read 代替进行(同步地).(有关linux异步I/O,可以参考有关的资料,《linux设备驱动开发详解》中给出了详细的解答)ssize_t (*write) (struct file * filp, const char __user *?? buffer, size_t count, loff_t * ppos);(参数filp为目标文件结构体指针,buffer为要写入文件的信息缓冲区,count为要写入信息的长度,ppos为当前的偏移位置,这个值通常是用来判断写文件是否越界)发送数据给设备. 如果 NULL, -EINVAL 返回给调用 write 系统调用的程序. 如果非负, 返回值代表成功写的字节数.(注:这个操作和上面的对文件进行读的操作均为阻塞操作)ssize_t (*aio_write)(struct kiocb *, const char __user * buffer, size_t count, loff_t * ppos);????? 初始化设备上的一个异步写.参数类型同aio_read()函数;int (*readdir) (struct file * filp, void *, filldir_t);对于设备文件这个成员应当为 NULL; 它用来读取目录, 并且仅对文件系统有用.unsigned int (*poll) (struct file *, struct poll_table_struct *);(这是一个设备驱动中的轮询函数,第一个参数为file结构指针,第二个为轮询表指针)这个函数返回设备资源的可获取状态,即POLLIN,POLLOUT,POLLPRI,POLLERR,POLLNVAL等宏的位“或”结果。每个宏都表明设备的一种状态,如:POLLIN(定义为0x0001)
您可能关注的文档
- C语言经典算法大全22.doc
- c语言课程设计 宾馆管理信息系统.doc
- C语言课程设计报告停车场管理系统.doc
- C辅导材料-C程序结构.doc
- D60高清投影 8.9套件1280X768.doc
- DBS系列活动-HARDcANDY 巴黎SHOWROOM新闻稿(已加品牌LOGO).doc
- DCS硬件结构,DCS画面操作及日常维护2011.1.doc
- DCS系统接地与抗干扰问题浅析.doc
- DCS系统的电缆布设和接地.doc
- DDA直线生成算法.doc
- 2023年蔬菜种植行业分析报告及未来五至十年行业发展报告 .pdf
- 2023-2024年辽宁单招考试英语试卷(含答案) (8) .pdf
- 2023-2024学年江苏人教版高考专题语文高考模拟习题及解析 .pdf
- 2024届高考一轮复习英语学案(人教版)选择性Unit5WorkingtheLand.pdf
- 2023年四川省成都市辅警协警笔试笔试模拟考试(含答案) .pdf
- 2022部编版五年级下册道德与法治期末测试卷及答案(最新) .pdf
- “点拨训练”相关课程课后习题汇编与建议.pdf
- 电流测量与自动化控制技术创新应用研究.pdf
- 员工绩效考核奖励制度.docx
- 基于TEMTES技术聚合物纳米柱制备研究.pdf
文档评论(0)