我知道freopen的正确用法是忽略给定post的分配:
freopen("/dev/tty","r", stdin);
我的问题是,我还应该检查返回值吗?我要重新打开标准输入并关闭它。例如:

if(freopen("/dev/tty","r", stdin)==NULL) {
  fprintf(stderr, "Unable to redirect stdin from file\n");
  exit(1);
}

最佳答案

这对于freopen的documentation说:



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

关于您的评论,文档说:



基于“独立于该流是否成功关闭”,如果发生错误,原始流似乎可以保持打开状态,或者处于 undefined 状态。无论如何,这不会产生任何实际的区别,因为无论如何freopen失败后,您都不希望使用该流。

08-24 15:50