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

  • 相关阅读:
    git学习(一)
    访问注解(annotation)的几种常见方法
    对于元数据的理解
    常用注解介绍
    深入理解Java的接口和抽象类
    POI依据类型设置导出格式
    java泛型
    java 向上转型和向下转型
    cell设置背景颜色为啥不起作用
    Java反射获取对象VO的属性值(通过Getter方法)
  • 原文地址:https://www.cnblogs.com/ggzwtj/p/2206781.html
Copyright © 2011-2022 走看看