C中的退出(), _exit()和 _Exit()之间有什么区别?
我如何决定使用哪个?
关于bash,
man 2退出
给了我_EXIT(2)页面,而
man 3退出
给出了页面EXIT(3)。
答案 0 :(得分:7)
exit()
在清理后终止。
_exit()
在通话结束后立即终止。
如果在调用exit()
函数时有一些堆栈损坏,程序可能会关闭分段错误,如果您使用_exit()
,则以快速模式退出程序。
来自http://msdn.microsoft.com/en-us/library/6wdz5232.aspx你有
exit()
- 执行完整的C库终止过程,终止进程,并使用提供的状态代码退出。
_exit()
- 执行快速C库终止过程,终止进程,并使用提供的状态代码退出。
_cexit()
- 执行完整的C库终止过程并返回给调用者,但不终止该过程。
_c_exit()
- 执行快速C库终止过程并返回给调用者,但不终止该过程。
答案 1 :(得分:7)
C99中的规范是exit
和_Exit
。
两者之间的区别在于exit
还执行可能在atexit
注册的处理程序并关闭流等,而_Exit
不会调用atexit
例程并且可能会或可能不会恰当地关闭溪流。
_exit
来自POSIX,具有与_Exit
类似的属性,区别在于可以保证正确关闭流。
总之,只要你能使用exit
,这就是最简洁的终止方式。
答案 2 :(得分:1)
来自男人:
退出:
在atexit(3)和on_exit(3)中注册的所有函数都被调用 注册的相反顺序......所有打开的stdio(3)流都被刷新并关闭。删除tmpfile(3)创建的文件。_exit:
函数_exit()与exit(3)类似,但不调用任何函数 在atexit(3)或on_exit(3)注册。是否冲洗标准 I / O缓冲区并删除使用tmpfile(3)创建的临时文件 实现有关。另一方面,_exit()确实关闭 文件描述符......
答案 3 :(得分:0)
1.exit(): 它可以清理关闭文件描述符,文件流等工作, 2._exit(): 它不能清理像关闭文件描述符,文件流等工作
这些是exit()和_exit()的主要区别。
我正在纠正你的回答