假设我在不执行fsync的情况下将块写入文件描述符,然后在一段时间后从同一个描述符中读取相同的块 . 是_113288_我会收到相同的信息吗?
该程序是单线程的,任何其他进程都不会随时访问该文件 .
是的,它由操作系统保证 .
即使修改尚未进入磁盘,操作系统也会使用其缓冲区缓存来反映文件修改并保证读取和写入的原子性级别,以及所有进程 . 因此,不仅您的流程,而且任何其他流程,都能够看到更改 .
至于 fsync() ,它只指示操作系统尽力将内容刷新到磁盘 . 另见 fdatasync() .
fsync()
fdatasync()
另外,我建议你使用两个文件描述符:一个用于阅读,另一个用于写入 .
fsync() 同步缓存和磁盘 . 由于数据已经在缓存中,因此将从那里而不是从磁盘读取数据 .
写入文件描述符时,数据在发送到磁盘之前存储在ram缓存和缓冲区中 . 因此,只要您不关闭描述符,就可以访问刚刚编写的数据 . 如果你关闭描述符,文件内容必须通过自己刷新或等待操作系统提高效率来放入磁盘,但是如果你想确保在打开一个新的FD后访问磁盘上刚写入的数据,你必须用 fsync() 刷新到磁盘 .
3 回答
是的,它由操作系统保证 .
即使修改尚未进入磁盘,操作系统也会使用其缓冲区缓存来反映文件修改并保证读取和写入的原子性级别,以及所有进程 . 因此,不仅您的流程,而且任何其他流程,都能够看到更改 .
至于
fsync()
,它只指示操作系统尽力将内容刷新到磁盘 . 另见fdatasync()
.另外,我建议你使用两个文件描述符:一个用于阅读,另一个用于写入 .
fsync()
同步缓存和磁盘 . 由于数据已经在缓存中,因此将从那里而不是从磁盘读取数据 .写入文件描述符时,数据在发送到磁盘之前存储在ram缓存和缓冲区中 . 因此,只要您不关闭描述符,就可以访问刚刚编写的数据 . 如果你关闭描述符,文件内容必须通过自己刷新或等待操作系统提高效率来放入磁盘,但是如果你想确保在打开一个新的FD后访问磁盘上刚写入的数据,你必须用
fsync()
刷新到磁盘 .