函数原型
#include <sys/uio.h>
ssize_t readv(int fd, const struct iovec *iov, int iovcnt);
参数
- 参数1:文件描述符
- 参数2:指向iovec结构数据指针
- 参数3:iovec数组中的元素数量(通常限制为IOV_MAX,Linux默认为1024)
- 返回值:
- 成功:读取的总字节数
- 失败:-1,并设置errno
实例
// 从文件读取数据到两个缓冲区
struct iovec iov[2];
char header[100], body[1024];iov[0].iov_base = header;
iov[0].iov_len = sizeof(header);
iov[1].iov_base = body;
iov[1].iov_len = sizeof(body);ssize_t n = readv(file_fd, iov, 2);
writev() - 分散输出(Gather Output)
函数原型
#include <sys/uio.h>
ssize_t writev(int fd, const struct iovec *iov, int iovcnt);
参数
- 参数1:文件描述符
- 参数2:指向iovec结构数据指针
- 参数3:iovec数组中的元素数量(通常限制为IOV_MAX,Linux默认为1024)
- 返回值:
- 成功:写入的总字节数
- 失败:-1,并设置errno
实例
// 发送HTTP响应头和文件内容
struct iovec iov[2];
char response_header[512];
char *file_content = mmap(...); iov[0].iov_base = response_header;
iov[0].iov_len = strlen(response_header);
iov[1].iov_base = file_content;
iov[1].iov_len = file_size;ssize_t n = writev(socket_fd, iov, 2);