在以下函数中,取自 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 页说:
好的,所以最好使用
offp
指针,但为什么呢? 最佳答案
filp->f_pos
是文件中的当前指针位置,而 offp
是用户访问文件的位置。在成功的读/写操作上前进文件指针,如果失败,则不应更改文件指针。内核自己做,如果你成功读/写,它会将 filp->f_pos
更改为 offp
。引用 LDD3:
关于c - 使用 loff_t *offp 而不是直接使用 filp->f_pos 的原因,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23501185/