当突然断电时,运行C的可执行文件变成空文件



我有两个可执行文件,它们的源代码如下:

main_a.c

#include "stdio.h"
int main() {
    printf("start to copyn");
    system("cp -pRf ~/main_b main_b");
    system("cp -pRf ~/main_a main_a");
    printf("donen");
}

main_b.c

#include "stdio.h"
int main() {
    while (1) {
        printf("i'm b, i'm runningn");
    }
}

gcc -o main_aGCC -o main_b main_b c

然后我把 main_a main_b ~ ~/测试

我cd在~/test,运行main_b在后台,像这样

。/main_b 1>/dev/null &

和运行main_a在前台链接这个

。/main_a;睡眠100

等一会儿,拔掉电源,然后重新启动,我得到两个文件,大小为零,没有内容在~/test.

有人知道为什么吗?

PS:为了确保文件已被替换,我在两个小时前触摸~/test/main_a和~/test/main_b并观察,然后拔掉电源。

touch -d "2 hours ago" ~/test/*

您应该检查每个系统(3)的结果代码。

我建议在main_a.c

main函数的末尾调用sync(2)

最新更新