writev函数的原型是ssize_t writev(int filedes, const struct iovec *iov, int iovcnt)
,第一个参数是需要写入的文件描述符,第二个参数是指向某个iovec
结构数组的一个指针,其中 iovec 结构定义如下:
struct iovec {
void *iov_base; /* starting address of buffer */
size_t iov_len; /* size of buffer */
};
第三个参数iovcnt
是向第二个参数传递的数组长度。
下图是来自尹圣雨所著的《TCP/IP网络编程》第12页:
接下来是实例代码writevtest.c
:
#include<stdio.h>
#include<sys/uio.h>
int main(int argc,char *argv[]){
struct iovec outputchars[4];
char buffer1[] = "ABCDEFG";
char buffer2[] = "1234567";
char buffer3[] = "890tsfy";
char buffer4[] = "abcdefg";
int str_len;
outputchars[0].iov_base = buffer1;
outputchars[0].iov_len = 3;
outputchars[1].iov_base = buffer2;
outputchars[1].iov_len = 4;
outputchars[2].iov_base = buffer3;
outputchars[2].iov_len = 5;
outputchars[3].iov_base = buffer4;
outputchars[3].iov_len = 6;
str_len = writev(1,outputchars,4);
puts("");
printf("Write bytes:%d\n",str_len);
return 0;
}
gcc writevtest.c -o writevtest
进行编译,./writevtest
执行。
你也可以尝试把str_len = writev(1,outputchars,4);
这行代码中4
改成3
、2
或者1
试一下。
此文章为11月Day 19学习笔记,内容来源于极客时间《网络编程实战》。