【问题标题】:file descriptor and loff_t offset in ioctl read and write interfaceioctl读写接口中的文件描述符和loff_t偏移量
【发布时间】:2015-08-05 06:18:49
【问题描述】:

最近我正在编写有关内核驱动程序模块和用户空间应用程序之间通信的示例代码。 我对 file_operations() 中的 .read 和 .write 接口有疑问。 根据LDD3:

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);

对于这两种方法,filp 是文件指针,count 是大小 请求的数据传输。 buff 参数指向用户 保存要写入的数据的缓冲区或其中的空缓冲区 应放置新读取的数据。最后,offp 是一个指向 “长偏移类型”对象,指示用户所在的文件位置 访问。

我想知道,为什么我们需要参数 loff_t *offp ?由于文件描述符中的元素: filp->f_pos 已经指示了当前的读写位置。 而且据我观察,在读或写返回后,系统会自动给filp->f_pos赋值offp。

非常感谢!

【问题讨论】:

    标签: file-io linux-kernel ioctl


    【解决方案1】:

    这些接口也用于pread/pwrite 函数,它们使用自己的偏移量而不是共享一个filp->f_pos。这就是 offp 被显式传递给接口的原因。

    【讨论】:

      猜你喜欢
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-22
      • 2014-04-25
      • 1970-01-01
      • 2017-07-14
      相关资源
      最近更新 更多