在以下函数中,取自 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/

10-12 15:02