退出C中的功能

时间:2010-09-07 10:09:21

标签: c posix exit

C中的退出() _exit() _Exit()之间有什么区别?

我如何决定使用哪个?

关于bash,

  

man 2退出

给了我_EXIT(2)页面,而

  

man 3退出

给出了页面EXIT(3)。

4 个答案:

答案 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()的主要区别。

我正在纠正你的回答