当多个进程试图同时替换同一文件时,Linux如何处理这种情况?

用户名

我知道这是一个理论上的问题,但是还没有令人满意的答案。所以想把这个问题放在这里。我有多个C ++进程(也想知道线程的行为),它们试图同时替换同一文件。在Linux中(使用Ubuntu 14.04和Centos 7)可以安全地执行多少操作?我需要放锁吗?

提前致谢。

杰里米·弗里斯纳

像Linux这样基于Unix的OS的文件系统都是围绕inode的概念设计的,它们是内部记录,描述了有关文件的各种元数据。通常,这些文件不会直接被用户或程序与之交互,但是它们的存在使这些文件系统具有某种程度的间接性,从而使它们能够提供一些其他操作系统(如Windows)无法提供的有用语义。

filename --> inode --> data

特别是,当文件被删除时,实际上发生的是文件的inode与文件名的分离。而不是(有必要)删除文件数据本身。也就是说,文件及其内容可以继续存在(尽管从用户的角度来看是看不见的),直到所有进程都关闭了在该文件上打开的文件句柄为止。一旦该索引节点不再可用于任何进程,文件系统才会将文件的数据块实际标记为空闲且可供重用。同时,即使从技术上讲旧文件的inode /数据仍然存在文件名仍可用于与另一个文件的inode(和数据)相关联。

结果是,在Linux下,即使其他线程/进程正在使用它,也可以随时删除(或重命名)文件,这是完全有效的。您的删除将成功,并且在那个瞬间打开该文件的所有其他程序都可以继续继续读取/写入/使用该文件,就像未删除该文件一样。唯一不同的是,文件名将不再出现在其目录中,并且当它们在文件上调用fclose()close()或等)时,文件的数据将消失。

由于domv new.txt old.txt基本上与a相同rm old.txt ; mv new.txt old.txt,因此在没有任何同步的情况下从多个线程执行此操作应该没有问题。(请注意,具有多个线程或进程同时打开同一文件并同时写入该文件的情况略有不同;虽然不会崩溃,但是它们很容易覆盖彼此的数据并损坏文件(如果他们不小心)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Java:如何处理试图修改同一文件的两个过程

多个Java进程可以同时读取同一文件吗?

如何使用keras的fit generator的多处理模式解决写入同一文件的多个进程?

Python 3:如何从多个进程写入同一文件而不弄乱它?

当应用程序的多个实例恰好同时使用StreamWriter访问同一文件时,会发生什么情况?

C ++多个进程写入同一文件-进程间互斥?

同一fd在不同进程中如何指向同一文件?

多个可执行文件同时访问同一文件夹

如何根据行的第一个单词替换同一文件中的多个模式?

BASH:将多个bash后台进程写入同一文件是否安全?

多个进程使用>重定向到同一文件

当多个进程尝试写入同一文件时会发生什么?

我们可以同时打开多个FileWriter流到同一文件吗?

使用tee同时输出多个命令到同一文件是否安全?

同时下载同一文件多次

同一文件的多个文件句柄

如何在仍写入同一文件的同时过滤掉特定行?

反应同一文件的多个导入

从同一文件中绘制多个系列

同一文件的多个副本

同一文件系统的多个挂载点

多个`FILE`附加到同一文件

如何在同一文件夹中导入多个Dart文件

读写同一文件时的Perl性能

在主要位置上传文件,同时将同一文件读写到多个次要位置

同一文件中的多个对象 - 如何创建 Makefile?

如何在terraform的同一文件中运行多个模块?

如何从多个URL下载同一文件以提高速度?

如何串联同一文件中的多个Excel工作表?