C ++,如果文件在被读取时移动会发生什么?

时间:2012-07-17 20:55:14

标签: c++ thread-safety race-condition file-access

如果C ++正在读取文件(比如一个包含20,000行的csv文件)和读取的中途,C ++会如何表现,另一个进程会删除该文件(假设它是一个ifstream)。

我是否遇到了段错误,或者我存储的行的向量是否有10,000行并且没有错误表明出现了问题?

同样地,如果我通过ofstream写入并且被删除中断会发生什么?在这种情况下,如果中断是中途,我的输出文件是否只包含最后10,000行?

2 个答案:

答案 0 :(得分:3)

这取决于操作系统。

如果您使用的是Unix-y操作系统,则会继续读取/写入数据,因为删除只是对包含目录和/或inode的更新,因此您不会影响文件的数据。

但是,如果文件数据所在的磁盘块可能会被您正在阅读的较新文件重新使用(同样取决于操作系统),那么一旦您完成了数据,您将基本读取错误的文件数据。缓冲液中。

如果你在Windows上,正如Seth Carnegie在评论中正确指出的那样,如果文件被打开以供阅读,该文件将自动被锁定(因而无法取消)。

答案 1 :(得分:-1)

我猜这是高度依赖系统的。由于Linux可能会继续工作,而Windows会给你带来一些麻烦。