我很努力去理解正在运行的测试中发生了什么。测试是在同一台机器上运行的两个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