断言stdin是开放的

时间:2011-12-09 15:41:59

标签: c stdin stdio

我在C中有函数假定stdin是开放的。我想在它前面添加一个断言,以确保stdin没有被任何人关闭。我如何检查stdin没有被任何人关闭?

assert(is_open(stdin));

1 个答案:

答案 0 :(得分:4)

您无法确定FILE*是否已关闭。 fclose可能free它指向的FILE对象,因此fclose之后对象的内容可能未定义。即使stdin也是如此。我之前提出的解决方案是错误的。对不起。

你可以在POSIX平台上做的最好的事情就像

bool stdin_open()
{
    errno = 0;
    fcntl(STDIN_FILENO, F_GETFD);
    return errno == EBADF;
}

虽然这真的告诉你一些标准输入FD,而不是stdin对象。