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