在Linux中编写和读取相同的fd而不使用fsync

时间:2011-12-17 18:43:04

标签: c linux fsync

假设我在不执行fsync的情况下将块写入文件描述符,然后在一段时间后从同一个描述符中读取相同的块。 保证我会收到相同的信息吗?

程序是单线程的,任何时候都没有其他进程可以访问该文件。

3 个答案:

答案 0 :(得分:5)

是的,它由操作系统保证。

即使修改尚未进入磁盘,操作系统也会使用其缓冲区缓存来反映文件修改,并保证对所有进程进行读写的原子级别。因此,不仅您的流程,而且任何其他流程都能够看到更改。

对于fsync(),它仅指示操作系统尽力将内容刷新到磁盘。另请参阅fdatasync()

另外,我建议你使用两个文件描述符:一个用于阅读,另一个用于写作。

答案 1 :(得分:2)

fsync()同步缓存和磁盘。由于数据已经在缓存中,因此将从那里读取而不是从磁盘读取数据。

答案 2 :(得分:1)

当您写入文件描述符时,数据在发送到磁盘之前存储在ram缓存和缓冲区中。因此,只要您不关闭描述符,就可以访问刚刚编写的数据。如果你关闭描述符,文件内容必须通过自己刷新或等待操作系统提高效率来放入磁盘,但是如果你想确保在打开一个新的FD后访问磁盘上刚写入的数据,你必须用fsync()刷新到磁盘。