介绍
#include <sys/uio.h>
ssize_t writev(int fd, const struct iovec *iov, int iovcnt);
ssize_t readv(int fd, const struct iovec *iov, int iovcnt);
struct iovec {
void *iov_base; /* Starting address */
size_t iov_len; /* Number of bytes to transfer */
};
功能:
- writev 可以将分散保存在多个缓冲中的数据一并发送
- readv 可以由多个缓冲分别接受
参数:
- fd:传递/接受数据的文件描述符
- iov:包含缓冲区的位置和大小
- iovcnt:第二个参数数组长度
返回值:
- 成功返回读入/写入的字节数
- 失败返回 -1,并设置 errno
简单使用
#include <stdio.h>
#include <sys/uio.h>
int main()
{
char buf1[] = "ABCDEFG";
char buf2[] = "1234567";
struct iovec vec[2];
vec[0].iov_base = buf1;
vec[0].iov_len = 3;
vec[1].iov_base = buf2;
vec[1].iov_len = 4;
int str_len = writev(1, vec, 2);
puts("");
char buf3[10] = {0}, buf4[10] = {0};
vec[0].iov_base = buf3;
vec[0].iov_len = 5;
vec[1].iov_base = buf4;
vec[1].iov_len = 10;
str_len = readv(0, vec, 2);
printf("first message: %s\n", buf3);
printf("second message: %s\n", buf4);
return 0;
}
注意事项
无