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