微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

on_exit和atexit函数有区别吗?

有什么区别吗?

int on_exit(void (*function)(int,void *),void *arg);

int atexit(void (*function)(void));

除了on_exit使用的函数获取退出状态的事实?

也就是说,如果我不关心退出状态,是否有任何理由使用这个或那个?

适用于C ++的NetBeans IDE:“解决缺less的本机构build工具”

ucontext和线程本地存储

错误:声明不声明任何东西

两个redirect在程序中

以编程方式在Linux上find可用的声卡

编辑:许多答案警告反对on_exit因为它是非标准的。 如果我正在开发一个内部公司使用的应用程序,并保证在特定的configuration上运行,我应该担心这个吗?

在C中input空types的指针

是否有可能从一个打开的文件描述符重新创build一个文件

二维数组与共享内存

备用input设备(Midi)不会阻止WinForms应用程序中的屏幕保护程序

从其hex数中获取Windows系统错误代码标题/说明

根据我发现的这个链接 ,似乎有一些差异。 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] 举报,一经查实,本站将立刻删除。

相关推荐