exit
的手册页说,
- 所有打开的
stdio
流都被刷新并关闭。由tmpfile
创建的文件被删除。 exit
的参数,即EXIT_SUCCESS
和EXIT_FAILURE
比使用 0 和一些非零值更具可移植性(对于非 UNIX 环境)值如 1 或 -1。特别是,VMS 使用不同的约定。
fcloseall
的手册页说,
- 标准流
stdin
、stdout
和stderr
也已关闭。 fcloseall
函数不锁定流,因此它不是线程安全的。
许多在线教程都说取消分配给定类型的“所有”资源是一个编程错误。它们应该由拥有它们的代码单独释放,或者根本不释放。
那么用exit
代替fcloseall
好不好?
最佳答案
简短回答:是的,exit()
更好。
长答案:
这取决于您如何设计程序。通常最好让每个组件自行清理,删除任何临时文件并刷新缓冲区 - 这对于对象析构函数可以处理此问题的 C++ 程序尤其常见。
在那种情况下,您将不会使用 exit()
也不fcloseall()
- 你会让你的组件自行清理然后简单地 return
来自 main()
.
对于 C 程序,您可能更愿意将其设计为期望在退出时通过这些函数之一自动清除所有内容。如果您正在考虑使用其中任何一个,那么 exit()
是一个更安全的选择,因为它会做更多:它会做 fcloseall()
会,加上 它将删除使用 tmpfile()
创建的临时文件.
此外,fcloseall()
是一个 GNU 扩展,它可能会影响您的程序的可移植性。
也许更重要的是,这些功能有不同的用途。
exit()
的目的|是结束你的程序。
fcloseall()
的目的|是刷新和关闭文件描述符,而不是结束你的程序。当您想确保在调用 exec
之前关闭所有文件(包括 stdin/stdout/stderr)时,它可能最有用。启动另一个进程,而不会将任何文件描述符泄漏到新进程中,这是它不会期望并且可能永远不会关闭的。
关于c - 使用 exit() 而不是 fcloseall() 来关闭多个文件好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31972860/