我有个问题。
我在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!
因此,基本上,除非文件或目录被完全删除,否则在写入完成后,它将出现在新位置。
但是,如果process
B
删除一个文件而其他进程仍在写入该文件,则该文件将可用于processf
,因为它包含inode引用。但是对于包括A
在内的其他进程,它将不可访问。任何其他进程只有能够通过f
中的文件描述符获得对inode的引用,才能访问fileA
。关于linux - 如果在程序编写文件时重命名父目录会发生什么,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21192448/