【问题标题】:running executable files turn to be empty files when suddenly power off突然断电运行的可执行文件变成空文件
【发布时间】: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

然后我把 ma​​in_ama​​in_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。

标签: c linux power-off


【解决方案1】:

你应该检查每个system(3)的结果代码。

我建议在main_a.c 中的函数main 的末尾调用sync(2)

【讨论】:

  • system(3) 的结果很好。调用sync(2)可以解决问题!但是我还是不明白关机前会发生什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-14
  • 1970-01-01
  • 1970-01-01
  • 2013-06-12
  • 1970-01-01
相关资源
最近更新 更多