我知道,鉴于这篇文章freopen
,正确的用法是省略分配:
freopen("/dev/tty","r", stdin);
我的问题是,我还应该检查返回值吗?我正在重新打开标准输入并关闭它。例如:
if(freopen("/dev/tty","r", stdin)==NULL) {
fprintf(stderr, "Unable to redirect stdin from file\n");
exit(1);
}
这个freopen 的文档说:
如果文件重新打开成功,该函数返回作为参数“stream”传递的指针,该指针可用于标识重新打开的流。否则,返回一个空指针。在大多数库实现中,errno 变量也设置为失败时特定于系统的错误代码。
所以是的,您可以对照 NULL 检查返回值以查看是否有错误,或者检查 errno。
关于您的评论,文档说:
如果指定了新文件名,该函数首先尝试关闭任何已与流(第三个参数)关联的文件并解除关联。然后,与该流是否成功关闭无关,freopen 打开由文件名指定的文件并将其与流相关联,就像 fopen 使用指定模式所做的那样。
基于“独立于该流是否成功关闭”,如果出现错误,原始流似乎可能保持打开状态或处于未定义状态。无论如何,这不会产生任何实际影响,因为无论如何您都不想在 freopen 失败后使用流。