问题描述
在以下功能,从LDD采取:
In following functions, taken from 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 *石油换食品计划的需要?我不能用直接的filp更新f_pos?
Why there is the need of loff_t *offp? Can't I use directly filp to update f_pos?
此外,在第54页的作者说,读取和写入会使用它们接收到的最后一个参数,而不是作用于filp-> f_pos直接。一个例外,这个指针更新的位置......
Moreover in page 54 the author says "read and write should update a position using the pointer they receive as the last argument instead of acting on filp->f_pos directly. The one exception to this..."
好,更好地使用指针石油换食品计划,但是为什么呢?
Ok, better use the pointer offp, but why?
推荐答案
filp-> f_pos
是文件当前指针位置,而石油换食品计划
是用户确实给文件访问。你对成功的读/写操作提前文件指针,如果你失败了,你不应该更改文件指针。内核是它本身,如果你没有成功的读/写它会改变 filp-> f_pos
到石油换食品计划
。引用LDD3:
filp->f_pos
is current pointer position in file, whereas offp
is where user does access to file. You advance file pointer on successful read/write operation, if you failed you should not change file pointer. Kernel does it itself, if you successfully did read/write it will change filp->f_pos
to offp
. Citing LDD3:
无论数据的方法传输量,他们应该
一般在石油换食品计划*的更新文件中的位置重新present当前
系统调用成功完成后文件的位置。该
然后,内核传播的文件位置改变回文件
结构在适当的时候。
这篇关于内核读取和写入 - 之所以使用参数loff_t *石油换食品计划,而不是直接filp-> f_pos使用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!