2012-04-12 4 views
2

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

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

+0

вы можете использовать 'PError()', чтобы получить более описательный информацию об ошибке – keety

+0

@keety: Я принятие решения о том, как моя программа должна справиться с ситуацией, когда есть ошибка в потоке, будь то просто страшное и бросить курить, а также зарыть и восстановить (сбросить флаг ошибки и продолжить) или сделать что-то еще. Чтобы принять это решение, я должен знать все возможные причины ошибок (или, по крайней мере, общие). –

+0

@keety, но 'ferror()' не должен обновлять 'errno', если поток ошибочен, поэтому, вероятно, слишком поздно использовать' perror() '. @ lie-ryan должен использовать 'perror()' после неудачного вызова 'fgets()'. – ydroneaud

ответ

2

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

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

Первые 5 причин (отказ, вытаскивание, выключение, выталкивание, потеря связи) одинаковы, то есть «устройство ушло» (хотя его можно было бы, вероятно, отличить от нормального выброса и аномального/неожиданного выброса). Итак, в настоящее время существует две причины: «устройство ушло» и «устройство заполнено». –

+0

Устройство @LieRyan полон, что повлияет на 'fgets'? – keety