打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
分散聚合IO

    分散/聚合I/O是一种可以在单次系统调用中对多个缓冲区输入输出的方法,可以把多个缓冲区的数据写到单个数据流,也可以把单个数据流读到多个缓冲区中。其命名的原因在于数据会被分散到指定缓冲区向量,或者从指定缓冲区向量中聚集数据。这种输入输出方法也称为向量I/O(vector I/O)。与之不同,标准读写系统调用(read,write)可以称为线性I/O(linear I/O)。

    与线性I/O相比,分散/聚合I/O有如下几个优势:

1)编码模式更自然

如果数据本身是分段的,向量I/O提供了直观的数据处理方法。

2)效率更高

单个向量I/O操作可以取代多个线性I/O操作。

3)性能更好

除了减少了发起的系统调用次数,通过内部优化,向量I/O可以比线性I/O提供更好的性能。

4)支持原子性

和多个线性I/O操作不同,一个进程可以执行单个向量I/O操作,避免了和其他进程交叉操作的风险。

函数原型:

#include <sys/uio.h>ssize_t readv(int fd, const struct iovec *iov, int iovcnt);ssize_t writev(int fd, const struct iovec *iov, int iovcnt);ssize_t preadv(int fd, const struct iovec *iov, int iovcnt, off_t offset);ssize_t pwritev(int fd, const struct iovec *iov, int iovcnt, off_t offset);

分散输入(scatter input)-聚合输出(gather output)。

struct iovec{    void *iov_base;  /*Starting address,向量缓冲区地址*/
    ssize_t iov_len;      /*Number of bytes to transfer,向量缓冲区大小,单位字节*/}

示例代码:

#include <sys/uio.h>#include <stdio.h>#include <unistd.h>#include <string.h>int main(){ char *str0 = "hello";  char *str1 = "world\n";  struct iovec iov[2];  ssize_t nwritten;    iov[0].iov_base = str0;  iov[0].iov_len = strlen(str0);  iov[1].iov_base = str1;  iov[1].iov_len = strlen(str1);    nwritten = writev(STDOUT_FILENO,iov,2); return 0;}
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
readv/writev
API函数有send,sendto和sendmsg
Linux之writev函数应用介绍
UNIX网络编程读书笔记:recvmsg和sendmsg函数
Netlink编程-数据结构
第十四章*高级I/O(七)--readv和writev函数
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服