【问题标题】:I don't know why write system call seems not been delay我不知道为什么写系统调用似乎没有延迟
【发布时间】:2021-09-24 04:16:13
【问题描述】:
int main(){    
    int fd = open("aaaaaa.txt", O_CREAT | O_RDWR, 0666);
    
    write(fd, "a", 1);

    system("more aaaaaa.txt");

    unlink("aaaaaa.txt");
    close(fd);
    return 0;
}

我想问一下为什么这个数据是立即写入文件的(通过'more'我可以看到这个),而不是在一段时间后直接写入内核页面缓存(不是真正写入文件) ,然后页面缓存被flusher线程真正写入文件。

【问题讨论】:

  • 你的结论是基于什么?
  • write 写入“文件”。 more 从“文件”中读取。无论“文件”是什么,从 c 程序的角度来看,页面缓存、磁盘上的神奇变化或刻在石头上的符号,都只是一个次要的实现细节。
  • 注意这种行为是 POSIX 标准所要求的:任何可证明发生在write() 调用之后的操作都必须看到新数据。在这里,more 的执行肯定发生在write() 之后,因为在您的程序中system("more") 出现在write() 之后。因此,如果一个系统要拥有一个页面缓存,它必须是一致的,并且所有程序都必须从中读取,而不是直接从磁盘中读取。

标签: c linux unix


【解决方案1】:

它被写入内核页面缓存。而more 从内核页面缓存中读取。内核页面缓存被所有进程共享,因为它在内核中。

【讨论】:

    猜你喜欢
    • 2016-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-13
    • 2018-02-02
    • 1970-01-01
    • 2020-09-16
    • 1970-01-01
    相关资源
    最近更新 更多