以下函数取自LDD:
ssize_t read(struct file *filp, char __user *buff, size_t count, loff_t *offp);
ssize_t write(struct file *filp, const char __user *buff, size_t count, loff_t *offp);
为什么需要loff_t *offp
?不能直接使用吗filp
更新f_pos
?
此外,作者在第 54 页中说道:
读取和写入应该使用它们收到的最后一个参数的指针来更新位置,而不是作用于filp->f_pos
直接地。唯一的例外是……
好的,所以最好使用offp
指针,但是为什么呢?
filp->f_pos
是文件中的当前指针位置,而offp
是用户访问文件的地方。在成功的读/写操作上前进文件指针,如果失败,则不应更改文件指针。内核自己做,如果你成功读/写它就会改变filp->f_pos
to offp
。引用LDD3:
无论方法传输多少数据量,它们都应该
一般更新*offp处的文件位置来表示当前
成功完成系统调用后的文件位置。这
然后内核将文件位置更改传播回文件中
适当时的结构。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)