检查C中freopen()的返回值

use*_*718 2 c freopen

我知道正确使用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)

1''*_*1'' 6

这篇关于freopen的文档说:

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

所以,是的,您可以检查返回值是否为NULL,以查看是否有错误,或检查错误.

关于你的评论,文件说:

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

基于"独立于该流是否成功关闭",如果出现错误,原始流可能会保持打开状态,或者处于未定义状态.在任何情况下,这都不会产生任何实际差异,因为无论如何你都不想在freopen失败后使用流.