ioctl读写接口

时间:2015-08-05 06:18:49

标签: file-io linux-kernel ioctl

最近我正在研究有关内核驱动程序模块和用户空间应用程序之间通信的示例代码。 我对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是指向a的指针   “long offset type”对象,指示用户所在的文件位置   存取。

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

非常感谢!

1 个答案:

答案 0 :(得分:1)

这些接口也用于pread / pwrite函数,它们使用自己的偏移量而不是共享的filp->f_pos。这就是为什么offp明确地传递给接口的原因。