我知道,freopen的正确使用是省略赋值,考虑到这个帖子:
freopen("/dev/tty","r", stdin);
我的问题是,我还应该检查返回值吗?我要重新打开史丁,不管它是什么。例如:
if(freopen("/dev/tty","r", stdin)==NULL) {
fprintf(stderr, "Unable to redirect stdin from file\n");
exit(1);
}发布于 2014-01-03 17:00:41
freopen的文档上写着:
如果文件被成功重新打开,该函数将返回作为参数" stream“传递的指针,该参数可用于标识重新打开的流。否则,返回一个空指针。在大多数库实现中,errno变量也被设置为失败时特定于系统的错误代码。
因此,您可以检查返回值和NULL,以查看是否存在错误,或者检查errno。
关于你的评论,文件上说:
如果指定了新的文件名,则函数首先尝试关闭与流(第三个参数)关联的任何文件,并将其断开。然后,无论该流是否成功关闭,freopen都会打开文件名指定的文件,并将其与流关联,就像fopen使用指定的模式所做的那样。
基于“独立于该流是否成功关闭”的基础上,如果存在错误,似乎可以将原始流保持为打开状态,或者处于未定义状态。在任何情况下,这都不会产生任何实际影响,因为无论如何,您都不希望在freopen失败后使用该流。
https://stackoverflow.com/questions/20908740
复制相似问题