05.07 readv 和 writev

这被称为 Scatter-Gather I/O。

其中,struct iovec 的定义如下:

struct iovec {
  void  *iov_base; /* Start address of the buffer */
  size_t iov_len;  /* Number of bytes to transfer to/from buffer */
};

这样 readvwritev 就能一次完成多个缓冲区的读取/写入。最重要的特征是:和多次调用 read/write 相比, readv/writev 操作具有原子性!

类似地,还有 preadvpwritev,连 lseek 的过程都一起加进来变得原子化了。