Каковы возможные условия ошибки в потоке, которые приведут к установке 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