介绍
#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;
}
注意事项
无
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)