在调用 freopen(file_name, open_mode, stderr) 之后,我需要在进程结束之前调用 fclose(stderr) 还是自动完成?提前感谢,对不起我的英语
问问题
1990 次
4 回答
2
没有必要关闭打开的流,因为所有打开的流都在程序终止时关闭,但fclose
每次fopen
调用都有一个很好的做法。在stderr
此处的情况下,此流在启动时已经打开(您不必调用fopen
),因此即使freopen
发出了一些调用,我也认为没有理由显式关闭它。
于 2013-04-20T16:44:56.473 回答
2
当一个进程结束时,它的所有句柄都会自动关闭。但是,关闭您获得的每个句柄是一种很好的方式- 例如,有人可能想要将您的程序转换为库,或者您可能正在寻找泄漏。你是否打电话freopen
并不重要。
但是,在 stderr 的情况下,情况有点不同。由于您没有专门打开该流,因此不应关闭它。它也很可能被您无法控制的其他组件使用,例如 atexit 函数或堆栈粉碎检测。
于 2013-04-20T16:45:32.507 回答
0
是的,这是一种很好的做法,但如果您的进程将立即结束,则并非绝对必要,因为当进程终止时,操作系统会为您清理所有内容。
于 2013-04-20T16:44:31.410 回答
0
当然。并且fclose(stderr);
会做。
于 2013-04-20T16:45:33.460 回答