Unix 系统已经长时间支持名为 readv 和 writev 的 2 个系统调用. 这些 read 和 write 的"矢量"版本使用一个结构数组, 每个包含一个缓存的指针和一个长度值. 一个 readv 调 用被期望来轮流读取指示的数量到每个缓存. 相反, writev 要收集每个缓存的内容到一起 并且作为单个写操作送出它们.

如果你的驱动不提供方法来处理矢量操作, readv 和 writev 由多次调用你的 read 和 write 方法来实现. 在许多情况, 但是, 直接实现 readv 和 writev 能获得更大的效率.

矢量操作的原型是:

ssize_t (*readv) (struct file *filp, const struct iovec *iov, unsigned long count, loff_t

*ppos);

ssize_t (*writev) (struct file *filp, const struct iovec *iov, unsigned long count, loff_t

*ppos);

这里, filp 和 ppos 参数与 read 和 write 的相同. iovec 结构, 定义于

<linux/uio.h>, 如同:

struct iovec

{

void   user *iov_base;   kernel_size_t iov_len;

};

每个 iovec 描述了一块要传送的数据; 它开始于 iov_base (在用户空间)并且有 iov_len 字节长. count 参数告诉有多少 iovec 结构. 这些结构由应用程序创建, 但是内核在调用 驱动之前拷贝它们到内核空间.

矢量操作的最简单实现是一个直接的循环, 只是传递出去每个 iovec 的地址和长度给驱动 的 read 和 write 函数. 然而, 有效的和正确的行为常常需要驱动更聪明. 例如, 一个磁 带驱动上的 writev 应当将全部 iovec 结构中的内容作为磁带上的单个记录.

很多驱动, 但是, 没有从自己实现这些方法中获益. 因此, scull 省略它们. 内核使用 read 和 write 来模拟它们, 最终结果是相同的.

最新文章

  1. 【WCF】自定义地址头的筛选器
  2. Atitit &#160;自动化gui 与 发帖机 技术
  3. 再看ftp上传文件
  4. maven 插件
  5. comparator接口与compare方法的实现
  6. HowTo: Linux Server Change OR Setup The Timezone
  7. 使用convert来批量处理图片
  8. BZOJ1012——[JSOI2008]最大数maxnumber
  9. Sqoop实现关系型数据库到hive的数据传输
  10. SQL Access Advisor
  11. (笔记)angular 事件传递获取当前
  12. How to solve the SVDI SN Number Display Problem
  13. VirtualBox内Linux系统与Windows共享文件夹
  14. TopCoder SRM 633div1
  15. 4.Maven概念模型,maven的生命周期,Maven坐标,依赖管理(依赖范围,依赖声明),仓库管理,私服概念
  16. 支付宝支付-常用支付API详解(查询、退款、提现等)
  17. UVa - 1616 - Caravan Robbers
  18. (原创)舌尖上的c++--相逢
  19. Intel DAAL AI加速——支持从数据预处理到模型预测,数据源必须使用DAAL的底层封装库
  20. CentOS7.5最小化安装之后的配置

热门文章

  1. mysql各个引擎区别
  2. JS判断PC 手机端显示不同的内容
  3. CSS基础学习中的几大要点心得
  4. 使用JS如何消除一个数组里重复的元素
  5. 简单利用XSS获取Cookie信息实例演示
  6. jQuery,javascript获得网页的高度和宽度$(document).height / $(window).height
  7. 在oracle中操作数据——使用特点的格式插入日期 sql函数的使用——日期函数
  8. 第四次C++
  9. Jmeter json处理器
  10. uva 11806 Cheerleaders (容斥)