readv和writev函数的功能可以概括为:对数据进行整合传输以及发送。通过writev函数可以将分散保存在多个buff的数据一并进行发送,通过readv可以由多个buff分别接受数据,适当的使用这两个函数可以减少I/O函数的调用次数:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include<stdio.h>
#include<sys/uio.h>
#define BUF_SIZE 100
int main(int argc, char *argv[])
{
int str_len;
struct iovec vec[2];
char buf1[BUF_SIZE]={0};
char buf2[BUF_SIZE]={0};
int fd = open(argv[1], O_RDONLY);
//vec[0].iov_base=buf1;
vec[0].iov_base=calloc(1, BUF_SIZE);
vec[0].iov_len=2;
//vec[1].iov_base=buf2;
vec[1].iov_base=calloc(1, BUF_SIZE);
vec[1].iov_len=BUF_SIZE;
str_len=readv(fd,vec,2);
puts((char *)(vec[0].iov_base));
puts((char *)(vec[1].iov_base));
return 0;
}
#include <sys/uio.h>
#include <stdio.h>
#include <fcntl.h>
#include <string.h>
int main(int argc,char *argv[])
{
ssize_t size;
char buf1[9] = "abc";
char buf2[9] = "sss";
struct iovec iov[2];
int fd1=open(argv[1], O_WRONLY);
iov[0].iov_base=buf1;
iov[0].iov_len=strlen(buf1);
iov[1].iov_base=buf2;
iov[1].iov_len=strlen(buf2);
size=writev(fd1,iov,2);
close(fd1);
return 0;
}