我需要实现退出调用的默认行为。我不知道我应该做什么,最合适的方法是什么。我已经读到它应该关闭文件描述符和其他东西。我应该关闭默认流(标准输出,错误和输入(吗?如何退出嵌套函数调用?使用 goto 是一种不好的做法,突破的最佳方法是什么?谢谢。
执行 exit(3)
中列出的所有操作,然后调用_exit(2)
系统调用。 或者,使用 longjmp(3)
跳回到 main()
函数,然后从中返回。 这调用的行为与调用 exit(3)
相同,并且同样依赖于 C 运行时,因此如果exit(3)
由于某种原因不可用,则从 main()
返回可能也无法正常工作。
不幸的是,AFAIK 没有可移植的方法来枚举可能已在 atexit(3)
和 on_exit(3)
中注册的所有函数,因此您必须手动跟踪这些函数(即每次调用 atexit(3)
或 on_exit(3)
时,将函数指针附加到列表中(。 冲洗stdio(3)
是 3 个简单的fflush(3)
调用。
你不需要关闭任何流或文件描述符;操作系统应该自动执行此操作(操作系统不得泄漏流和 fd,因此它负责清理它们(。
注意:longjmp()
在C++下几乎总是错误的;而是抛出一个异常。 它通常只能在直C下使用。