应该" freopen' ed" stdout被关闭?

时间:2014-09-10 16:49:51

标签: c file-descriptor fclose freopen

在C或C ++程序中,我可以使用freopen将输出(即stdout文件描述符)重定向到另一个文件(或丢弃它,将文件描述符重新打开到/ dev / null或另一个接收器)

问题是:如果我这样做,我应该在程序结束执行之前明确关闭文件描述符吗?为什么?在哪个平台上?如果我不关闭文件描述符,一般会发生什么?在这种特定情况下会发生什么?

1 个答案:

答案 0 :(得分:4)

  1. 我应该在程序结束执行之前明确关闭文件描述符吗?

    来自freopen(3) man page

      

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

    所以不,你不必关闭原来的FILE *。不过,您应该关闭从freopen电话回来的那个。顺便说一句 - 这些都是FILE *变量,而不是文件描述符。

  2. <强>为什么吗

    因为文档说你没必要。

  3. 在哪些平台上

    正确实现C标准定义的freopen(3)

  4. 如果我不关闭文件描述符,一般会发生什么情况?

    当程序退出时,操作系统会清理程序使用的资源。