【问题标题】:How can I create a file when my c program exits?c程序退出时如何创建文件?
【发布时间】:2012-11-15 20:11:41
【问题描述】:

我正在做一个任务,我在 shell 中实现 unix 历史命令。在我的程序中,我为 SIGINT 编写了一个信号处理程序。当用户输入 (ctrl)(c) 时,将显示他们的历史记录。

当我的程序终止时,我需要将历史记录存储在一个文件中。有没有一种简单的方法可以检测我的程序何时退出?或者我是否需要为每种类型的信号((ctrl)(d)、pausebreak 等)设置一个信号处理程序。

【问题讨论】:

  • 另一种选择是确保您的历史记录在磁盘上始终是最新的(在您使用的系统调用的限制范围内)。当你去执行一个命令时,你启动命令并写入历史文件。然后,如果程序终止,历史记录在磁盘上是最新的,为下次运行 shell 做好准备。

标签: c shell signals signal-processing


【解决方案1】:

atexit() 可能就是您要查找的内容,请参阅手册页:man 3 atexit

用法类似于:

#include <stdlib.h>

static void save_the_file(void)
{
    /* ... */
}

int main()
{
    atexit(save_the_file);
    return 0;
}

另一种选择是使用destructor 属性(GCC/Clang):

static __attribute__((destructor)) void save_the_file(void)
{
     /* your code */
}

【讨论】:

  • 谢谢,我现在就去看看。
【解决方案2】:

atexit 就是这样。但是如果你也想关注 SIGKILL,你需要调用 waitpid() 的观察进程。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-03
    相关资源
    最近更新 更多