【发布时间】:2014-03-22 10:34:03
【问题描述】:
我有两个可执行文件,其来源如下:
main_a.c
#include "stdio.h"
int main() {
printf("start to copy\n");
system("cp -pRf ~/main_b main_b");
system("cp -pRf ~/main_a main_a");
printf("done\n");
}
main_b.c
#include "stdio.h"
int main() {
while (1) {
printf("i'm b, i'm running\n");
}
}
gcc -o main_a main_a.c gcc -o main_b main_b.c
然后我把 main_a 和 main_b 放在 ~ 和 ~/test 中。
我在 ~/test 中 cd,像这样在后台运行 main_b
./main_b 1>/dev/null &
并在前台运行 main_a 链接
./main_a;睡眠 100
等一下,拔掉电源,然后重启,我得到两个大小为零的文件,在~/test中没有内容。
有人知道为什么吗?
PS: 为确保文件已被替换,我在两个小时前触摸 ~/test/main_a 和 ~/test/main_b 并观看,然后拔下电源。
touch -d "2 小时前" ~/test/*
【问题讨论】:
-
在目录 ~/test 中创建大小为零的文件名是什么
-
什么文件系统?停电后你跑
fsck吗? -
@Loong:你能改变你的第一个程序,而不是“-pRf”标志使用“-pR”。我认为 cp 命令中的额外 'f' 标志会导致用它们自己强制覆盖这些文件,从而使其为空..
-
@tmp 没有'f' 我无法替换正在运行的 main_b 或 main_a。我的目的是在它们运行时更新它们。
-
@JohnZwinck 我已经运行了“fsck”,但除了“来自 util-linux 2.20.1 的 fsck”之外什么也没有显示。它的文件系统是 ext4。