【问题标题】:Do you need to fclose() both files after freopen()?在 freopen() 之后是否需要 fclose() 两个文件?
【发布时间】:2019-05-29 08:18:33
【问题描述】:

我正在编写一个代码,它将一个文件保存到另一个名称不同的文件中 - 但是,我不确定是否需要关闭这两个文件?

FILE *logfile = fopen("log.txt", "a+");
while(1) {
    char filename[500];
    char logline[512]; 
    char channel[512];

    //Do stuff

    sprintf(filename, "%s.log.txt", channel);
    freopen(filename, "a+", logfile);
    log_to_file(logline, logfile);
}

【问题讨论】:

  • @EUS 我看过了,但我没有在这里使用标准输出或标准输入,它是另一个文件。 (对不起,如果本质上是一样的,我就是不明白)
  • 程序结束时,两个文件都会自动关闭,所以不是特别需要,但是值得推荐
  • 您可以同时打开多个文件,只要确保在某个时候关闭它们。(如果其他程序试图访问您正在读取/写入的文件,可能会出现问题)如果您%100 确定没有其他人使用这些文件,做任何你想做的事。
  • freopen 关闭原始文件,并将给定的FILE 指针与新文件相关联。这意味着代码一次只打开一个文件,因此只关闭一个文件。是的,完成文件后关闭文件是一种很好的做法。

标签: c fopen freopen


【解决方案1】:

来自man page

freopen() 函数打开名称为 path 指向的字符串的文件,并将 stream 指向的流与它相关联。 原始流(如果存在)已关闭。 [...]

因此,您无需显式关闭上一个流,一旦使用完毕,只需关闭最近的流即可。

【讨论】:

    猜你喜欢
    • 2021-07-25
    • 1970-01-01
    • 2018-07-03
    • 2011-04-09
    • 1970-01-01
    • 2014-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多