Linux之writev函数应用介绍

Linux之writev函数应用介绍

writev将多个数据存储在一起,将驻留在两个或更多的不连接的缓冲区中的数据一次写出去(wyq:应该是从内存的缓冲区直接写入到文件,即写入到磁盘中存储起来)。

UNIXWINSOCK提供了不同的实现方法UNIX系统下,使用writev,可以指定一系列的缓冲区,收集要写的数据,使可以安排数据保存在多个缓冲区中,然后同时写出去,从而避免出现Nagle和延迟ACK算法的相互影响。

readv/writev 函数及存储映射 I/O

原创aisxyz 最后发布于2018-01-19 00:57:02 阅读数 77  收藏

展开

readv 和 writev 函数可用于在一次函数调用中读、写多个非连续缓冲区,有时也称这两个函数为散布读(scatter read)和聚集写(gather write)。

#下面应该是c++的程序语言编程

#include

ssize_t readv(int fd, const struct iovec *iov, int iovcnt);

ssize_t writev(int fd, const struct iovec *iov, int iovcnt);

/* 两个函数的返回值:已读或已写的字节数;若出错,返回 -1 */

struct iovec{

void    *iov_base;    // starting address of buffer

size_t   iov_len;     // size of buffer

};

这两个函数的第二个参数 iov 都是指向 iovec 结构数组的一个指针,该数组中的元素由 iovcnt 指定,其最大值受限于 IOV_MAX。readv 函数将读入(wyq:应该是从文件中读入,也就是从磁盘读入)的数据按 iov[0]、iov[1] 直至 iov[iovcnt-1] 的顺序散布到缓冲区中。它总是先填满一个缓冲区后再填写下一个。writev 函数则按照同样的顺序将缓冲区中的数据聚集输出到文件中。

存储映射 I/O 能将一个磁盘文件映射到存储空间中的一个缓冲区上,通过操作该缓冲区可以在不使用 read 和 write 的情况下间接地操作底层文件。为使用这种功能,应首先告诉内核将一个给定的文件映射到一个存储区域中。这可用 mmap 函数来实现。

————————————————

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容