【发布时间】: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