【问题标题】:Exit Handler in CC中的退出处理程序
【发布时间】:2013-02-15 18:26:36
【问题描述】:

全部,

我想在我的程序中开发一个退出处理程序。

我真的是 C 的新手;都是关于在 C 中管理信号的吗?

我如何知道我的程序是否以良好的方式结束?

如果没有,退出时如何获取最大信息?

【问题讨论】:

  • 日志做得更好。
  • @cedrou 他们俩:)

标签: c exception-handling error-handling


【解决方案1】:
  1. C(C89 和 C99 标准)提供atexit()注册函数以在程序退出时调用。这与信号无关。与信号处理程序不同,您可以注册多个退出处理程序。退出处理程序的调用顺序与它们在atexit() 中注册的顺序相反。

  2. 约定是当程序干净退出时,它返回退出状态0。这可以通过return 0 来自main()exit(0) 在您程序中的任何位置完成。

  3. 在 Unix/Linux/POSIX 类型的操作系统(不确定 Windows)中,父进程使用 wait() 系统调用或其变体获取有关子进程的退出状态信息。

示例:这是一个简单的程序及其输出来演示atexit()

#include <stdlib.h>
#include <stdio.h>

static void exit_handler1(void)
{
    printf("Inside exit_handler1()!n");
}

static void exit_handler2(void)
{
    printf("Inside exit_handler2()!n");
}

int main(int argc, char *argv[])
{
    atexit(exit_handler1);
    atexit(exit_handler2);
    return 0;
}

程序产生的输出:

Inside exit_handler2()!
Inside exit_handler1()!

【讨论】:

    【解决方案2】:

    看看这里你会找到你想要的一切: http://www.cplusplus.com/reference/cstdlib/exit/

    我在这里添加了一个新链接看看:

    Exception libraries for C (not C++)

    【讨论】:

      【解决方案3】:

      如果我没有弄错,您会询问退出时从程序返回结果的问题。您应该使用exit(x); 函数从程序中返回值。您可以将任何整数值作为参数x。并且不要忘记在程序开始时使用#include &lt;stdlib.h&gt;

      【讨论】:

      • 如果我有一个缓冲区溢出,我将无法到达退出回调,我希望避免任何崩溃。
      • @user2122937 - 通常没有办法捕获崩溃(例如写入无效的内存地址),除非您在调试器下运行 C 程序或使用 C 解释器。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-10
      • 1970-01-01
      • 1970-01-01
      • 2015-02-02
      • 2023-04-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多