我很努力去理解正在運行的測試中發生了什麼。測試是在同一臺機器上運行的兩個shell腳本。文件重命名ext3似乎打破POSIX規範
答:
#!/bin/bash
touch target;
for ((i=0; i < 1000; i=i+1)); do
echo "snafu$i" > $1/file$i;
mv -f $1/file$i $1/target;
done;
B:
#!/bin/bash
while(true);do
cat $1/target;
done
所以我運行A/ext3_dir,然後運行B/ext3_dir>出來(所以只有錯誤去到std出)。
這一切工作正常,並根據POSIX規範的「重命名」預期:
如果存在通過新的參數命名的鏈接,它應拆除老重命名爲新的。在這種情況下,名爲new的鏈接在整個重命名操作中對其他進程始終可見,並在操作開始之前引用new或old引用的文件。
但是,如果我這樣做,此舉前加一個硬鏈接到臨時文件:
#!/bin/bash
touch target;
for ((i=0; i < 1000; i=i+1)); do
echo "snafu$i" > $1/file$i;
ln $1/file$i $1/link$i
mv -f $1/file$i $1/target;
done;
我上讀出側「沒有這樣的文件或目錄」錯誤 - 看似違反的POSIX規範。
任何人都可以對此行爲有所瞭解嗎?測試是否有效?我無法弄清楚爲什麼創建一個額外的鏈接到我正在移動的文件應該影響從移動目標讀取的能力。
應該說:這是在RHEL5(2.6.18) – 2012-03-03 15:12:05