我在C中有函数假定stdin是开放的。我想在它前面添加一个断言,以确保stdin没有被任何人关闭。我如何检查stdin没有被任何人关闭?
assert(is_open(stdin));
答案 0 :(得分:4)
您无法确定FILE*
是否已关闭。 fclose
可能free
它指向的FILE
对象,因此fclose
之后对象的内容可能未定义。即使stdin
也是如此。我之前提出的解决方案是错误的。对不起。
你可以在POSIX平台上做的最好的事情就像
bool stdin_open()
{
errno = 0;
fcntl(STDIN_FILENO, F_GETFD);
return errno == EBADF;
}
虽然这真的告诉你一些标准输入FD,而不是stdin
对象。