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

在Linux中不使用fsync写入和读取相同的fd,c,linux,fsync,C,Linux,Fsync,假设我在不进行fsync的情况下将一个块写入文件描述符,然后在一段时间后从同一描述符读取同一块。是否保证我会收到相同的信息 该程序是单线程的,任何时候都不会有其他进程访问该文件。fsync()同步缓存和磁盘。由于数据已经在缓存中,因此将从缓存中读取数据,而不是从磁盘读取数据。是的,操作系统保证读取数据 即使修改还没有使其进入磁盘,操作系统也使用其缓冲缓存来反映文件修改,并保证所有进程的读写原子性级别。因此,不仅您的流程,而且任何其他流程都可以看到这些更改 至于fsync(),它只指示操作系统尽最

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


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

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

是的,操作系统保证读取数据

即使修改还没有使其进入磁盘,操作系统也使用其缓冲缓存来反映文件修改,并保证所有进程的读写原子性级别。因此,不仅您的流程,而且任何其他流程都可以看到这些更改

至于
fsync()
,它只指示操作系统尽最大努力将内容刷新到磁盘。另请参见
fdatasync()


另外,我建议您使用两个文件描述符:一个用于读取,另一个用于写入。

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

刷新磁盘,谢谢。使用两个描述符有什么特别的原因吗?因为它使工作更容易写一个fd,读另一个fd会怎么样?如果我在一个fd中写入一些内容而不刷新,不关闭文件,然后读入第二个文件描述符,会怎么样?我会在第二个文件描述符中得到我在第一个文件描述符中写的东西而不进行刷新吗?