struct iovec 结构体定义与使用
1 .struct iovec定义了一个向量元素。通常,这个结构用作一个多元素的数组。对于每一个传输的元素,指针成员iov_base指向一个缓冲区,这个缓冲区是存放的是readv所接收的数据或是writev将要发送的数据。成员iov_len在各种情况下分别确定了接收的最大长度以及实际写入的长度。
2 .在这里,主要介绍readv和writev两个函数;readv(2)与writev(2)函数都使用一个I/O向量的概念;在头文件中定义了struct iovec 结构体,其定义和各成员如下:
1 | struct iovec { |
linux中使用这样的结构体变量作为参数的函数很多,常见的有:
1 | 头文件: |
readv和writev作为read与write函数的衍生函数,在一个原子操作中读取或是写入多个缓冲区。readv和writev函数中的各参数的含义如下:
函数原型:
1 | ssize_t readv(int fd, const struct iovec *iov, int iovcnt); |
这两个函数需要三个参数:
要在其上进行读或是写的文件描述符fd
读或写所用的I/O向量(vector)
要使用的向量元素个数(count)
这些函数的返回值是readv所读取的字节数或是writev所写入的字节数。如果有错误发生,就会返回-1,而errno存有错误代码。注意,也其他I/O函数类似,可以返回错误码EINTR来表明他被一个信号所中断。
3 .示例代码1
代码的功能是:向终端(屏幕)打印字符串:i am happy.
1 | /************************************************************************* |
原文:https://blog.csdn.net/lixiaogang_theanswer/article/details/73385643