【问题标题】:What are some practical applications of the quick_exit and at_quick_exit functions?quick_exit 和 at_quick_exit 函数有哪些实际应用?
【发布时间】:2019-09-06 23:03:06
【问题描述】:

我在查看stdlib.h 并寻找我尚未实现的功能时遇到了at_quick_exitquick_exit

我不明白拥有这两个功能的意义。它们有什么实际用途吗?

【问题讨论】:

  • 它可以安全地用于信号处理程序(假设任何注册的退出函数也是信号安全的)。
  • 还是没有头绪,看起来共享对象相关glibc master - sourceware.org
  • 我假设您特别想知道使用 at_exitexit 对它们的需求是什么?
  • @Shawn:没有规定可以从信号处理程序中使用quick_exit
  • @Shawn:如果从信号处理程序调用quick_exit,我找不到任何语言限制at_quick_exit 处理程序可以做什么,这显然是错误的......这是一个遗漏还是我忽略了什么吗?

标签: c exit


【解决方案1】:

由于 C++,它基本上存在于 C 中。 WG 14 C 标准委员会的相关文档可以在here 找到。

该文档改编自 C++ 标准接受的论文。 quick_exit 背后的想法是退出程序取消所有线程并且执行静态对象的析构函数。 C 根本没有对“析构函数”之类的语言支持,thread support library in C 几乎没有实现。 at_quick_exitquick_exit 函数在 C 中几乎没有意义。

在 C 中有一个函数 _Exitcauses normal program termination to occur and control to be returned to the host environment,但不需要刷新打开的文件描述符、写入未缓冲的数据、关闭打开的文件,而不是 exit()。基本上at_quick_exitquick_exit 函数是为运行自定义用户句柄然后执行_Exit 而构建的设施,而atexit 是在调用exit() 时执行自定义处理程序的设施。

【讨论】:

  • _exit 还阻止调用atexit,建议在从exec... 系列函数返回失败后阻止UB,如果任何定义的atexit 函数因失败调用而无效。跨度>
【解决方案2】:

它们基本上没有实际用途。意图似乎是,一个可能具有重要非平凡atexit 处理程序的函数可以使用quick_exit 退出,只调用此类处理程序的最小子集(它通过调用at_quick_exit 定义)被调用,在调用所有atexit 处理程序可能不安全。它也可以从信号处理程序中调用,但在这种情况下,您似乎无法从 at_quick_exit 处理程序中做任何有意义的事情。

【讨论】:

  • 可能值得一提的是,quick_exit 不像 exit 那样刷新缓冲区、关闭打开的流或删除临时文件(但系统仍可能选择这样做)。
  • ... 或信号处理程序调用标准库中除 abort 函数、_Exit 函数、quick_exit 函数之外的任何函数...
猜你喜欢
  • 2011-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-30
  • 2023-04-10
  • 2021-09-12
相关资源
最近更新 更多