在 C 或 C++ 程序中,我可以使用freopen将输出(即标准输出文件描述符)重定向到另一个文件(或丢弃它,将文件描述符重新打开到 /dev/null 或另一个接收器)。
问题是:如果这样做,我是否应该在程序结束执行之前明确关闭文件描述符?为什么?在哪些平台上?如果我不关闭文件描述符,一般情况下会发生什么情况?
在 C 或 C++ 程序中,我可以使用freopen将输出(即标准输出文件描述符)重定向到另一个文件(或丢弃它,将文件描述符重新打开到 /dev/null 或另一个接收器)。
问题是:如果这样做,我是否应该在程序结束执行之前明确关闭文件描述符?为什么?在哪些平台上?如果我不关闭文件描述符,一般情况下会发生什么情况?
我应该在程序结束执行之前明确关闭文件描述符吗?
该
freopen()
函数打开名称为filename指向的字符串的文件,并将stream 指向的流与其关联。原始流(如果存在)已关闭。
所以不,您不必关闭原始FILE *
. 不过,您可能应该关闭从freopen
通话中返回的那个。顺便说一句 - 这些都是FILE *
变量,而不是文件描述符。
为什么?
因为文档说您不必这样做。
在哪些平台上?
任何freopen(3)
按照 C 标准定义的正确实现。
如果我不关闭文件描述符,一般情况下会发生什么情况?
当您的程序退出时,操作系统会清理您的程序使用的资源。