默认退出函数实现



我需要实现退出调用的默认行为。我不知道我应该做什么,最合适的方法是什么。我已经读到它应该关闭文件描述符和其他东西。我应该关闭默认流(标准输出,错误和输入(吗?如何退出嵌套函数调用?使用 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下使用。