高级文件 I/O 技术详解
1. SG - I/O 变体
在多线程应用中,我们可以使用pread(2)和pwrite(2)系统调用来并行执行文件 I/O 操作。Linux 还提供了preadv(2)和pwritev(2)系统调用,它们在readv(2)和writev(2)的基础上增加了一个第四个参数offset,可以指定 SG - I/O 操作的文件偏移量,且该偏移量不会被改变,这对于多线程应用可能很有用。其函数签名如下:
#include <sys/uio.h> ssize_t preadv(int fd, const struct iovec *iov, int iovcnt, off_t offset); ssize_t pwritev(int fd, const struct iovec *iov, int iovcnt, off_t offset);一些较新的 Linux 内核(从 4.6 版本开始)还提供了preadv2(2)和pwritev2(2)系统调用。与之前的 API 不同的是,它们增加了一个第五个参数flag,允许开发者更灵活地控制 SG - I/O 操