默认退出功能实现

时间:2014-11-28 22:33:20

标签: c++ c linux exit system-calls

我需要实现exit调用的默认行为。我不知道该怎么办,最合适的方法是什么。我已经读过它应该关闭文件描述符和其他东西。 我应该关闭默认流(stdout,err和in)吗? 如何退出嵌套函数调用?使用goto是不好的做法,突破的最佳方法是什么? 感谢。

1 个答案:

答案 0 :(得分:0)

执行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' s,因此它负责清理它们。)

注意:longjmp()在C ++下几乎总是错误的;抛出异常。它通常只应在直接C下使用。