3

在调用 freopen(file_name, open_mode, stderr) 之后,我需要在进程结束之前调用 fclose(stderr) 还是自动完成?提前感谢,对不起我的英语

4

4 回答 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 回答