Каковы возможные условия ошибки в потоке, которые приведут к установке ferror()?

Некоторые операции чтения и записи из потоков могут устанавливать флаг ошибки в потоке, который можно проверить с помощью ferror(stream)Хотя я совершенно уверен, что это часто задаваемый вопрос, я не смог найти список всех возможных причин ошибок в SO или в общем Интернете. Что может привести к установке ferror()?

В частности, я ищу возможные причины ошибок при выполнении fgets() для стандартного ввода в Minix 3, но я также ищу более общий список.

1 ответ

Решение

Нет простого списка возможных ошибок. Однако, в зависимости от устройства, с которого вы читаете или пишете, проблемы могут включать:

  • Устройство выходит из строя (короткие замыкания, перегрев, умирает от старости,...)
  • Устройство извлечено из машины (флешка)
  • Устройство выключено или теряет питание (внешний дисковод)
  • Устройство извлечено (CD-ROM)
  • Сетевое соединение потеряно (SAN, NAS)
  • Устройство заполнено (места для записи не осталось)
  • ...

Каковы возможные условия ошибки в потоке, при которых будет установлена ​​функция ferror()?

Одна из нескольких возможностей: При попытке неправильного направления операции ввода-вывода устанавливается индикатор ошибки.

#include <stdio.h>
int main(void) {
  FILE *f = fopen("t", "w");
  if (f) {
    int ch = fgetc(f);
    printf("ch %d\n", ch);
    printf("Error %d\n", ferror(f));
    printf("EOF %d\n", feof(f));
    fclose(f);
  }
}
 

Вывод

ch -1
Error 1
EOF 0
Другие вопросы по тегам