Утверждение STDIN открыт - PullRequest
       32

Утверждение STDIN открыт

1 голос
/ 09 декабря 2011

У меня есть функция в C, которая предполагает, что стандартный ввод открыт.Я хочу добавить утверждение перед ним, чтобы никто не закрывал stdin.Как я могу проверить, что stdin никем не закрыт?

assert(is_open(stdin));

1 Ответ

4 голосов
/ 09 декабря 2011

Вы не можете узнать, был ли FILE* закрыт.fclose может free объект FILE, на который он указывает, поэтому содержимое объекта может быть неопределенным после fclose.Это верно даже для stdin.Решение, которое я предложил ранее, было неверным.Извините за это.

Лучшее, что вы можете сделать на платформе POSIX, это что-то вроде

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

, хотя это действительно говорит вам о стандартной входной FD, а не об объекте stdin.

...