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 */
};
这样 readv
和 writev
就能一次完成多个缓冲区的读取/写入。最重要的特征是:和多次调用 read
/write
相比, readv
/writev
操作具有原子性!
类似地,还有 preadv
和 pwritev
,连 lseek
的过程都一起加进来变得原子化了。