我知道当您调用fwrite
或fprintf
或者其他任何写入文件的函数时,内容不会立即刷新到磁盘,而是缓冲在内存中。操作系统如何为文件执行缓冲
首先,OS在哪里管理这些缓冲区以及如何管理这些缓冲区。其次,如果您写入文件,然后读入您编写的内容,并假设操作系统在您写入和读取之间没有刷新内容,如何知道它必须从缓冲区中返回读取?它如何处理这种情况。
我想知道这一点的原因是我有兴趣在用户空间中实现自己的缓冲方案,而不是像OS那样在内核空间中实现。也就是说,写入文件将被缓存在用户空间中,而实际写入只会在某个点发生。通常,我还需要处理对仍在缓冲区中的内容调用read的情况。是否有可能在用户空间中完成所有这些。
cnicutar,thanx。但我认为,出于我的目的,我可以使用stdio缓冲区概念,将写入缓存在用户空间中,然后再调用实际的写入。因为在我的情况下,写操作不能立即执行。我每隔50毫秒左右检查一次系统中的错误,只有在确定没有错误时才写入文件。请注意,我正在讨论应用程序使用可靠性的库,因此它应该适用于所有情况。也就是说,它不应该是特定于应用程序的。 – MetallicPriest
@MetallicPriest从某种意义上讲,它将重塑stdio。只要你不期望一致性(其他进程立即看到你的修改)应该没问题。 – cnicutar
因此,您的意思是,在用户级别,当stdio尚未实际进行系统调用时,读取仍保存在stdio写入缓冲区中的内容将被返回以进行读取? – MetallicPriest