c++ - 如果我打开文件后有人覆盖该文件会怎样?

标签 c++ c file

当我在C中打开一个文件时,我得到一个文件描述符,如果我没有读取它的内容,然后有人修改了该文件,我会读取旧文件还是新文件? 假设一个文件有很多行,在读取文件时,有人编辑开头会发生什么,这会以某种方式破坏我的文件读取文件的方式吗?

读取文件时程序如何不被损坏?操作系统可以解决这个问题吗?如果我仍然可以读取旧数据,这些数据存储在哪里?

open 的手册页,有一些关于 open 内部的信息,但对我来说不是很清楚。

最佳答案

C 语言标准不承认其他进程的存在,也不指定它们与程序之间的交互(C++ 也不这样做)。该行为取决于操作系统和/或文件系统。

通常,最安全的假设是文件操作不是原子操作,因此在另一个进程正在编辑文件时访问文件将是竞争条件的一个示例。有些系统可能会提供一些更严格的保证。

尝试避免问题的一般方法是文件锁定。标准 C 库没有用于文件锁定的 API,但多任务操作系统通常有。

关于c++ - 如果我打开文件后有人覆盖该文件会怎样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59706673/

相关文章:

c++ - 将非静态函数指针传递给另一个类?

c++ - 用STL做新软件好不好?

c++ - 读/写锁

c - C 中的 MagickConstituteImage() 段错误

php - 带有特殊字符的文件名,如 "é"NOT FOUND

c++使用模板的 undefined reference

C程序不断向串口发送相同的数据

c - 排序数组问题

java - 如何有效地跟踪 Java 中大文件的更改(以及最重要的读取)

c# - 为什么我不能在 MVC Controller 中使用 System.IO.File 方法?