Linux内核4.1在file_operations的read_iter和write_iter

博客介绍了Linux内核从4.1版本开始,file_operations结构体中的异步读写函数由aio_read和aio_write替换为read_iter和write_iter。这一变化优化了设计,解决了AIO与循环驱动程序之间的不匹配问题,通过增强iov_iter结构和相关代码,使得AIO操作可以适应用户空间或内核空间的形式。
摘要由CSDN通过智能技术生成

 

在中文网站里,对结构体file_operations的描述中仍大多停留在旧版本,包含

ssize_t (*aio_read)(struct kiocb *  , char __user *  buffer, size_t  size ,  loff_t   p);
可以看出,这个函数的第一、三个参数和本结构体中的read()函数的第一、三个参数是不同 的,
异步读写的第三个参数直接传递值,而同步读写的第三个参数传递的是指针,因为AIO从来不需要改变文件的位置。
异步读写的第一个参数为指向kiocb结构体的指针,而同步读写的第一参数为指向file结构体的指针,每一个I/O请求都对应一个kiocb结构体);
初始化一个异步读 -- 可能在函数返回前不结束的读操作.如果这个方法是 NULL, 所有的操作会由 read 代替进行(同步地).

ssize_t (*aio_write)(struct kiocb *, const char __user *  buffer, size_t  count, loff_t * ppos);
      初始化设备上的一个异步写.参数类型同aio_read()函数;

 

而从4.1版本开始,关于异步读写的函数已经被read_iter和write_iter取代了。

这样的优化设计到两个结构体:

struct iovec {
	void __user *iov_base;
	__kernel_size_t iov_len;
    };  

struct iov_iter {
	const struct iovec *iov;
	unsigned long nr_segs;
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值