名称::
功能:散布读/聚集写
用法:#include <sys/uio.h>
函数原形:
参数:
filedes
iov
iovcnt
返回值:
readv和writev函数用于在一次函数调用中读、写多个非连续缓冲区。有时也将这两个函数成为散布读和聚集写。
下面就是读多个缓冲区的例子:
#include <sys/uio.h>
#include <stdio.h>
#include <fcntl.h>
int main(int argc,char *argv[])
{
ssize_t size;
char buf1[9];
char buf2[9];
struct iovec iov[2];
fd1=open(argv[1],O_RDONLY);
fd2=open(argv[2],O_RDONLY);
fd3=open(argv[3],O_WRONLY);
size=read(fd1,buf1,sizeof(buf1));
printf(“%s size is:%d\n”,argv[1],size);
size=read(fd2,buf2,sizeof(buf2));
printf(“%s size is:%d\n”,argv[2],size);
iov[0].iov_base=buf1;
iov[0].iov_len=sizeof(buf1);
iov[1].iov_base=buf2;
iov[1].iov_len=sizeof(buf2);
size=writev(fd3,iov,2));
printf(“%s size is:%d\n”,argv[3],size);
close(fd1);
close(fd2);
close(fd3);
}
先用vi或cat建立三个文件(test1,test2,test3),test写入123456789,test写入abcdefghi.test3为空。
然后运行命令:
#./12_4 test1 test2 test3
在屏幕上会输出:
test1 size is:9
test2 size is:9
test3 size is:18
打开test3,文件内容为123456789abcdefghi.
程序先把test1和test2的内容分别读到缓冲区buf1和buf2中。然后用write把buf1和buf2的内容写至test3.