【问题标题】:Exit functions in CC中的退出函数
【发布时间】:2011-04-09 03:08:30
【问题描述】:

exit()_exit()_Exit()在C语言中有什么区别?

我如何决定使用哪个?

在 bash 上,

人2退出

给了我页面_EXIT(2),而

人 3 退出

给页面 EXIT(3)。

【问题讨论】:

    标签: c posix exit


    【解决方案1】:

    C99 中的规范是 exit_Exit

    两者之间的区别在于exit 还执行可能向atexit 注册的处理程序并关闭流等,而_Exit 不调用atexit 例程并且可能会或可能不会正确关闭流.

    _exit 来自 POSIX,具有与 _Exit 相似的属性,不同之处在于它保证正确关闭流。

    总而言之,只要可以,您应该使用exit,这是最干净的终止方式。

    【讨论】:

      【解决方案2】:

      1.exit() : 它清理了关闭文件描述符、文件流等工作, 2._exit() : 它不是清理关闭文件描述符、文件流等工作

      这些是 exit() 和 _exit() 的主要区别。

      我纠正了你的答案

      【讨论】:

      • _exit 确实关闭了文件描述符。
      • 不,内核可以。 _exit 只是终止进程。 _exit 的主要特点是它什么都不做,只是告诉内核终止进程。
      【解决方案3】:

      来自男人:

      exit:
      所有用 atexit(3) 和 on_exit(3) 注册的函数都被调用,在 他们注册的相反顺序......所有打开的stdio(3)流都被刷新和关闭。由 tmpfile(3) 创建的文件被删除。

      _exit:
      函数_exit()类似于exit(3),但不调用任何函数 使用 atexit(3) 或 on_exit(3) 注册。是否冲洗标准 I/O 缓冲和删除使用 tmpfile(3) 创建的临时文件是 依赖于实现。另一方面, _exit() 确实关闭打开 文件描述符 ...

      【讨论】:

        【解决方案4】:

        exit() 在清理后终止。

        _exit() 在通话后立即终止。

        如果您在调用exit() 函数时某些堆栈损坏,程序可能会因分段错误而关闭,如果您使用_exit(),则程序以快速模式退出。

        来自http://msdn.microsoft.com/en-us/library/6wdz5232.aspx你有

        exit() - 执行完整的 C 库终止过程,终止进程,并以提供的状态码退出。

        _exit() - 执行快速 C 库终止过程,终止进程,并以提供的状态码退出。

        _cexit() - 执行完整的 C 库终止过程并返回给调用者,但不终止进程。

        _c_exit() - 执行快速 C 库终止过程并返回给调用者,但不终止进程。

        【讨论】:

        • 好的,但是完全终止和快速终止有什么区别⸮
        • 请详细说明什么时候应该使用什么。
        • 致电exit()。其他是实现细节,在构建框架时通常在某些罕见情况之外没有那么有用。
        猜你喜欢
        • 2010-09-25
        • 1970-01-01
        • 1970-01-01
        • 2019-03-24
        • 2010-12-22
        • 1970-01-01
        • 2011-07-07
        • 1970-01-01
        • 2023-03-24
        相关资源
        最近更新 更多