我有一個問題。如果我在程序正在寫入文件時重命名父目錄,會發生什麼情況
我正在LINUX機器上運行程序。這個程序將輸出寫入「output.txt的」父文件夾「父」
PARENT
|________SUB
|_________ output.txt
我不小心改名爲家長而輸出在寫...即的子文件夾內的「子」的文件,我做了以下命令
mv PARENT PARENT_NEW
到目前爲止我的程序沒有崩潰或任何東西。有沒有人知道我剛剛做了什麼的影響?
我有一個問題。如果我在程序正在寫入文件時重命名父目錄,會發生什麼情況
我正在LINUX機器上運行程序。這個程序將輸出寫入「output.txt的」父文件夾「父」
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!
因此,基本上,除非文件或目錄被完全刪除,這將是存在於噸他寫完後的新位置。
但是,如果過程B
刪除文件f
而其他一些過程A
仍寫入該文件,該文件f
將是可用來處理A
,因爲它擁有一個inode參考。但是對於其他進程,包括B
,它將無法訪問。任何其他進程仍然可以訪問文件f
,前提是它可以通過文件描述符/proc/<PID-of-A>/fd
獲取對inode的引用。
在Linux上,從Unix繼承而來,一旦本地磁盤上的文件打開,該進程就會處理它。您可以重命名父目錄,甚至可以刪除該文件。只要不關閉並重新打開文件,這些操作不會影響寫入文件的過程。
根據程序的不同,我希望您移動當前文件,但它將創建一個與原始文件具有相同名稱的新文件。如果文件始終保持打開狀態,我不相信您可以移動它,但如果打開並關閉文件,則可能有兩個文件。 –
我沒有明確移動當前文件..我移動/重命名了它所在的文件夾。 – jmtoung