【问题标题】:How to minimize the number of system calls? in C如何最小化系统调用的次数?在 C 中
【发布时间】:2016-10-01 14:02:39
【问题描述】:

如何在我的代码中最小化系统调用 read() 和 write() 的数量?

int copy(char* entry, char* exit){
    char buf; 
    int in; 
    int out; 

    in = open(entry,O_RDONLY);
    out = open(exit ,O_APPEND|O_WRONLY);
    while(read(in, &buf, 1) != 0){
        write(out, &buf, 1); }

    close(in);
    close(out);
    return 0;

}

【问题讨论】:

  • 使用更大的缓冲区。
  • 但是文件的大小可以是50,但也可以是350。所以我不知道我最小化调用次数的缓冲区设置有多大。
  • 缓冲区可以是任意长度。如果是 1K 字节,那么它将系统调用次数除以 1000。此外read() 为您提供读取的字节数,以防要读取的剩余字节小于缓冲区宽度。

标签: c copy


【解决方案1】:

假设您将缓冲区扩大到例如 256,现在写:

char buf[256];
int n;
...
while((n=read(in, buf, sizeof(buf))) > 0){
    write(out, buf, n);
}

每次读取时最多读取 256 个字节。 read 返回读取的字节数,所以n 现在有了这个数字,就是你写出来的。最后一次读取会小于 256,所以最后一次写入也会小于 256。

【讨论】:

    猜你喜欢
    • 2019-10-02
    • 1970-01-01
    • 2014-12-03
    • 2010-12-08
    • 1970-01-01
    • 2012-11-17
    • 1970-01-01
    • 2013-10-05
    • 1970-01-01
    相关资源
    最近更新 更多