on_exit()和atexit()函数之间有区别吗?

Nat*_*man 19 c linux

两者之间有什么区别吗?

   int on_exit(void (*function)(int , void *), void *arg);
Run Code Online (Sandbox Code Playgroud)

   int atexit(void (*function)(void));
Run Code Online (Sandbox Code Playgroud)

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

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

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

Der*_*ark 18

你应该atexit()尽可能使用. on_exit()是非标准的,不太常见.例如,它在OS X上不可用.

Kernel.org - on_exit():

此功能来自SunOS 4,但也存在于libc4,libc5和glibc中.它不再出现在Solaris(SunOS 5)中.避免使用此功能,而是使用标准的atexit(3).


Mik*_*one 14

根据这个链接我发现,似乎有一些差异. on_exit将允许您传入一个在on_exit调用函数时传入函数的参数...这可能会让您设置一些指针,以便在退出时进行一些清理工作.

此外,它似乎on_exit是一个SunOS特定的功能,可能在所有平台上都不兼容......所以你可能想要坚持使用atexit,尽管它更具限制性.


R..*_*R.. 5

不同之处在于它atexit是 C 语言,并且on_exit是 GNU 和其他 Unixy 系统(但不是POSIX 的一部分)上可用的一些奇怪的扩展。