我有个问题。
我在Linux机器上运行一个程序。该程序将输出写入父文件夹“父”的子文件夹“子”中的文件“输出”。

PARENT
   |________SUB
             |_________ output.txt

在输出写入时,我意外地重命名了父……,即,我执行了以下命令
mv PARENT PARENT_NEW

到目前为止我的程序还没有崩溃。有人知道我刚才所做的事的后果吗?

最佳答案

根据unix,填充将出现在新位置。下面是一个简单的实验:

$ mkdir /tmp/test
$ cat > /tmp/test/abc.txt
hello
world

and again!

因此,当cat仍在等待输入时,打开一个新终端并重命名文件夹:
$ mv /tmp/test/ /tmp/test2

现在回到前面的终端:(按Ctrl+D完成cat的输入)
$ ls /tmp/test/
ls: cannot access /tmp/test1/abc.txt: No such file or directory
$ ls /tmp/test2/
abc.txt
$ cat /tmp/test2/abc.txt
hello
world

and again!

因此,基本上,除非文件或目录被完全删除,否则在写入完成后,它将出现在新位置。
但是,如果processB删除一个文件而其他进程仍在写入该文件,则该文件将可用于processf,因为它包含inode引用。但是对于包括A在内的其他进程,它将不可访问。任何其他进程只有能够通过f中的文件描述符获得对inode的引用,才能访问fileA

关于linux - 如果在程序编写文件时重命名父目录会发生什么,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21192448/

10-11 23:13
查看更多