zoukankan      html  css  js  c++  java
  • 分散聚集I/O

    include <stdio.h>
    #include <fcntl.h>
    #include <string.h>
    #include <unistd.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <sys/uio.h>

    int main(){
    int fd = open("test", O_RDWR);

    char *buf[] = {"abcdefg\n",
    "abcdefgh\n",
    "abcdefghi\n"};

    struct iovec iov[3];

    int i, nr, j;

    for(i = 0; i < 3; i++){
    iov[i].iov_base = buf[i];
    iov[i].iov_len = strlen(buf[i]+1);
    }

    ftruncate(fd, 0);

    nr = writev(fd, iov, 3);

    close(fd);

    fd = open("test", O_RDWR);

    char a[10], b[11], c[12];

    iov[0].iov_base = a;
    iov[0].iov_len = sizeof(a);
    iov[1].iov_base = b;
    iov[1].iov_len = sizeof(b);
    iov[2].iov_base = c;
    iov[2].iov_len = sizeof(c);

    nr = readv(fd, iov, 3);

    printf("%d %d\n", (int)iov[0].iov_base, (int)a);

    for(i = 0; i < 3; i++){
    printf("%s", (char*)iov[i].iov_base);
    }

    close(fd);

    return 0;
    }

    和多次的线性I/O相比,向量I/O不仅减少了系统调用的次数,而且可以经过内核的优化提供性能的改善。一个进程可以执行单次向量操作不会与另一个进程的操作交叉在一起的风险内核动态分配内部数据结构表示每个区段,但是如果小于8的话,内核会在它使用的堆栈上为段创建一个小型的数组,大小为8,这时就不需要动态分配了。

  • 相关阅读:
    宏大的目标
    java tcp ip网络编程(二) 套接字的基本使用
    java socket编程(一)简介
    是么是 API 和 SDK
    Mac 下显示隐藏文件
    iOS-事务相关
    iOS测试一段代码的运行时间
    sqlite3 语句总结
    iOS-scrollview及其子类适配iOS7
    OAuth2.0授权和SSO授权
  • 原文地址:https://www.cnblogs.com/ggzwtj/p/2206781.html
Copyright © 2011-2022 走看看