readv/writev系统调用
来源:互联网 发布:淘宝网上超市怎么开 编辑:程序博客网 时间:2024/06/04 23:26
名称:readv/writev
功能:散布读/聚集写头文件:#include <sys/uio.h>
函数原形: ssize_t readv(int filedes,const struct iovec *iov,int iovcnt);
ssize_t writev(int filedes,const struct iovec *iov,int iovcnt);
参数:filedes 文件描述符
iov 指向iovec结构数组的一个指针。
iovcnt 数组元素的个数
返回值:若成功则返回已读、写的字节数,若出错则返回-1
readv和writev函数用于在一次函数调用中读、写多个非连续缓冲区。有时也将这两个函数成为散布读和聚集写。
这两个函数的第二个参数是指向iovec结构数组的一个指针:
struct iovec{
void *iov_base;
size_t iov_len;
};
writev以顺序iov[0]至iov[iovcnt-1]从缓冲区中聚集输出数据。writev返回输出的字节总数,通常,它应等于所有缓冲区长度之和。
readv则将读入的数据按上述同样顺序散布读到缓冲区中。readv总是先填满一个缓冲区,然后再填写下一个。readv返回读到的总字节数。如果遇到文件结尾,已无数据可读,则返回0。
下面就是读多个缓冲区的例子:
/*12_4.c*/
#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.
- readv/writev系统调用
- readv/writev系统调用
- writev与readv系统调用
- readv/writev
- writev与readv
- readv/writev 函数
- readv/writev 函数
- 【Linux】readv与writev
- readv()和writev()函数
- readv和writev函数
- readv与writev
- readv&writev函数
- 【Linux】readv与writev
- unix 网络 编程 readv writev
- 函数readv 和函数writev
- readv和writev简单实现
- linux高级IO之readv/writev
- 套接字API(十二)readv和writev函数
- 转来看看
- 5、关于++,--作为前缀和后缀
- Log4j layout ConversionPattern符号说明
- ASP读取EXCEL
- 6、指针1 (指针定义理解、将数值存储到指定的内存地址)
- readv/writev系统调用
- flex报表----柱状图
- 关于socket的read和write
- 7、数组1---(定义、a,&a,&a[0]区别、以指针形式访问和以下标形式访问)(
- 制作一个自定义Dialog例子
- SQL语句大全
- 动易SiteFactory添加.Net控件,并结合VS进行编程
- 8、 关于a 和 &a区别的经典题目
- 还是网络