有什么区别吗?
int on_exit(void (*function)(int,void *),void *arg);
和
int atexit(void (*function)(void));
也就是说,如果我不关心退出状态,是否有任何理由使用这个或那个?
适用于C ++的NetBeans IDE:“解决缺less的本机构build工具”
ucontext和线程本地存储
错误:声明不声明任何东西
两个redirect在程序中
以编程方式在Linux上find可用的声卡
编辑:许多答案警告反对on_exit因为它是非标准的。 如果我正在开发一个内部公司使用的应用程序,并保证在特定的configuration上运行,我应该担心这个吗?
在C中input空types的指针
二维数组与共享内存
备用input设备(Midi)不会阻止WinForms应用程序中的屏幕保护程序
根据我发现的这个链接 ,似乎有一些差异。 on_exit将允许你传入一个参数,当它被调用的时候传递给on_exit函数…这可能让你设置一些指针来做一些清理工作,当它是时候退出。
此外,看起来, on_exit是SunOS特定的功能,可能在所有平台上都不兼容…所以你可能想要坚持使用atexit,尽管它有更多的限制。
如果可能,应该使用atexit() 。 on_exit()是非标准的,不太常见。 例如,它在OS X上不可用。
coreel.org – on_exit() :
这个函数来自SunOS 4,但也存在于libc4,libc5和glibc中。 它不再发生在Solaris(SunOS 5)中。 避免这个功能,并使用标准的atexit(3)来代替。
不同之处在于atexit是C, on_exit是GNU上可用的一些奇怪的扩展,谁知道什么是Unixy系统(但不是 POSIX的一部分)。
@Nathan,我找不到任何函数将返回当前正在运行的进程的退出代码。 无论如何,我期望它在调用atexit()时候还没有设置。 我的意思是运行时知道它是什么,但可能没有向操作系统报告。 但这只是猜测。
看起来你需要使用on_exit()或者构造你的程序,以便退出代码无关紧要。 让主函数中的最后一个语句将全局的exited_cleanly变量变为true将不会是不合理的。 在你用atexit()注册的函数中,你可以检查这个变量来确定程序如何退出。 这只会给你两个国家,但我希望这对大多数需求来说是足够的。 如果需要,您也可以扩展这种类型的方案以支持更多的退出状态。
@Nathan
首先,看看是否有另一个API调用来确定退出状态…快速浏览一下,我没有看到一个,但我不熟悉标准的C API。
一个简单的选择是有一个全局变量来存储退出状态…默认是一个未知的错误原因(如果程序异常终止)。 然后,当你调用exit时,你可以将退出状态保存在全局中,并可以从任何atexit函数中检索它。 这要求在每个退出调用之前勤勉地存储退出状态,显然并不理想,但如果没有API,并且不想让on_exit不在平台上,那么这可能是唯一的选择。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。