【发布时间】:2011-04-09 03:08:30
【问题描述】:
exit()、_exit()和_Exit()在C语言中有什么区别?
我如何决定使用哪个?
在 bash 上,
人2退出
给了我页面_EXIT(2),而
人 3 退出
给页面 EXIT(3)。
【问题讨论】:
exit()、_exit()和_Exit()在C语言中有什么区别?
我如何决定使用哪个?
在 bash 上,
人2退出
给了我页面_EXIT(2),而
人 3 退出
给页面 EXIT(3)。
【问题讨论】:
C99 中的规范是 exit 和 _Exit。
两者之间的区别在于exit 还执行可能向atexit 注册的处理程序并关闭流等,而_Exit 不调用atexit 例程并且可能会或可能不会正确关闭流.
_exit 来自 POSIX,具有与 _Exit 相似的属性,不同之处在于它保证正确关闭流。
总而言之,只要可以,您应该使用exit,这是最干净的终止方式。
【讨论】:
1.exit() : 它清理了关闭文件描述符、文件流等工作, 2._exit() : 它不是清理关闭文件描述符、文件流等工作
这些是 exit() 和 _exit() 的主要区别。
我纠正了你的答案
【讨论】:
来自男人:
exit:
所有用 atexit(3) 和 on_exit(3) 注册的函数都被调用,在 他们注册的相反顺序......所有打开的stdio(3)流都被刷新和关闭。由 tmpfile(3) 创建的文件被删除。_exit:
函数_exit()类似于exit(3),但不调用任何函数 使用 atexit(3) 或 on_exit(3) 注册。是否冲洗标准 I/O 缓冲和删除使用 tmpfile(3) 创建的临时文件是 依赖于实现。另一方面, _exit() 确实关闭打开 文件描述符 ...
【讨论】:
exit() 在清理后终止。
_exit() 在通话后立即终止。
如果您在调用exit() 函数时某些堆栈损坏,程序可能会因分段错误而关闭,如果您使用_exit(),则程序以快速模式退出。
来自http://msdn.microsoft.com/en-us/library/6wdz5232.aspx你有
exit() - 执行完整的 C 库终止过程,终止进程,并以提供的状态码退出。
_exit() - 执行快速 C 库终止过程,终止进程,并以提供的状态码退出。
_cexit() - 执行完整的 C 库终止过程并返回给调用者,但不终止进程。
_c_exit() - 执行快速 C 库终止过程并返回给调用者,但不终止进程。
【讨论】:
exit()。其他是实现细节,在构建框架时通常在某些罕见情况之外没有那么有用。