C 突然断电时,正在运行的可执行文件变为空文件
我有两个可执行文件,其源代码如下: 主空调C 突然断电时,正在运行的可执行文件变为空文件,c,linux,power-off,C,Linux,Power Off,我有两个可执行文件,其源代码如下: 主空调 #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"); } 主楼b.c #include "stdio.h" int main() { while (1) {
#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");
}
主楼b.c
#include "stdio.h"
int main() {
while (1) {
printf("i'm b, i'm running\n");
}
}
gcc-o主管道a主管道a.c
gcc-o主接线盒主接线盒c
然后我把main\u a和main\u b放在~和~/test中
我将cd放入~/test,在后台运行main_b,如下所示
/main_b 1>/dev/null&
并在前台链接中运行main_a
/主要部分a;睡100
等一下,拔下电源,然后重新启动,我得到两个文件,大小为零,在~/test中没有内容
有人知道为什么吗
附言:
为了确保文件已被替换,我在两小时前触摸~/test/main_a和~/test/main_b并观看,然后拔下电源
触摸-d“2小时前”~/测试/*
你应该检查每一个的结果代码
我建议在
main_a.c
中的main
函数末尾调用在目录~/testWhat文件系统中创建的文件名是什么?停电后您是否运行了fsck
?@Loong:您能否更改您的第一个程序,而不是使用“-pRf”标志“-pR”。我认为cp命令中额外的“f”标志会导致这些文件自身被强制覆盖,从而使其为空。@tmp如果没有“f”,我无法替换正在运行的main_b或main_a。我的目的是在它们运行时更新它们。@JohnZwinck我已经运行了“fsck”,但它只显示“fsck from util linux 2.20.1”。它的文件系统是ext4。系统(3)的结果很好。调用sync(2)可以解决此问题!但我还是不明白断电前会发生什么。