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,这时就不需要动态分配了。

  • 相关阅读:
    并查集模板
    css margin 负值 合并盒子边框线
    滑动门原理
    精灵图制作
    css 单行文本超出用 省略号表示...
    css vertical-align 垂直对齐 解决图片空白缝隙
    css 鼠标样式 取消input 框 轮廓线 防止用户拖拽文本域
    css 显示与隐藏
    css 圆角矩形用法
    css 定位详解
  • 原文地址:https://www.cnblogs.com/ggzwtj/p/2206781.html
Copyright © 2011-2022 走看看