当我用C打开一个文件时,我得到一个文件描述符,如果我没有读过它的内容,然后有人修改了这个文件,我会读旧文件还是新文件?假设一个文件有很多行,在读取文件时,有人编辑了开头会发生什么,这会以某种方式破坏我的文件读取文件的方式吗?
读取文件时程序如何不被损坏?是处理这个问题的操作系统吗?如果我仍然可以读取旧数据,那么这些数据存储在哪里?
open 的手册页有一些关于 open 内部的信息,但我不是很清楚。
C 语言标准不承认其他进程的存在,也不指定它们与程序之间的交互(C++ 也没有)。行为取决于操作系统和/或文件系统。
通常,假设文件操作不是原子操作是最安全的,因此在另一个进程正在编辑文件时访问文件将是竞争条件的一个例子。有些系统可能会提供一些更严格的保证。
尝试避免问题的一般方法是文件锁定。标准 C 库没有用于文件锁定的 API,但多任务操作系统通常有。