Linux之writev函数应用介绍
writev将多个数据存储在一起,将驻留在两个或更多的不连接的缓冲区中的数据一次写出去(wyq:应该是从内存的缓冲区直接写入到文件,即写入到磁盘中存储起来)。
UNIX和WINSOCK提供了不同的实现方法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 函数来实现。
————————————————