Вы не можете узнать, был ли FILE*
закрыт.fclose
может free
объект FILE
, на который он указывает, поэтому содержимое объекта может быть неопределенным после fclose
.Это верно даже для stdin
.Решение, которое я предложил ранее, было неверным.Извините за это.
Лучшее, что вы можете сделать на платформе POSIX, это что-то вроде
bool stdin_open()
{
errno = 0;
fcntl(STDIN_FILENO, F_GETFD);
return errno == EBADF;
}
, хотя это действительно говорит вам о стандартной входной FD, а не об объекте stdin
.