首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查C中freopen()的返回值

检查C中freopen()的返回值
EN

Stack Overflow用户
提问于 2014-01-03 16:54:36
回答 1查看 2.3K关注 0票数 2

我知道,freopen的正确使用是省略赋值,考虑到这个帖子

freopen("/dev/tty","r", stdin);

我的问题是,我还应该检查返回值吗?我要重新打开史丁,不管它是什么。例如:

代码语言:javascript
复制
if(freopen("/dev/tty","r", stdin)==NULL) {
  fprintf(stderr, "Unable to redirect stdin from file\n");
  exit(1);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-03 17:00:41

freopen的文档上写着:

如果文件被成功重新打开,该函数将返回作为参数" stream“传递的指针,该参数可用于标识重新打开的流。否则,返回一个空指针。在大多数库实现中,errno变量也被设置为失败时特定于系统的错误代码。

因此,您可以检查返回值和NULL,以查看是否存在错误,或者检查errno。

关于你的评论,文件上说:

如果指定了新的文件名,则函数首先尝试关闭与流(第三个参数)关联的任何文件,并将其断开。然后,无论该流是否成功关闭,freopen都会打开文件名指定的文件,并将其与流关联,就像fopen使用指定的模式所做的那样。

基于“独立于该流是否成功关闭”的基础上,如果存在错误,似乎可以将原始流保持为打开状态,或者处于未定义状态。在任何情况下,这都不会产生任何实际影响,因为无论如何,您都不希望在freopen失败后使用该流。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20908740

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档