Ответ 1
Сам стандарт C не требует особого использования функций errno WRT для stdio
; он указывает ferror()
, но говорит только об этом
7.13.10.3 Функция ferror Функция ferror проверяет индикатор ошибки для потока, на который указывает поток. Функция ferror возвращает ненулевое значение тогда и только тогда, когда для потока установлен индикатор ошибки.
из проекта C99: http://www.vmunix.com/~gabor/c/draft.html. Любые фактические коды ошибок используются, по большей части, для реализации.
Однако библиотека GNU C на linux также соответствует спецификациям POSIX:
http://pubs.opengroup.org/onlinepubs/9699919799/toc.htm
которые в этом контексте более четко определены. Например, если вы посмотрите на страницу fopen
:
http://pubs.opengroup.org/onlinepubs/9699919799/functions/fopen.html
В разделе "Ошибки" вы увидите много подробной информации, включая конкретные коды errno.
Опять же, библиотека GNU C, используемая практически во всех нормальных Linux-системах, совместима с POSIX, поэтому вы можете рассчитывать на эту информацию;). Те (онлайн) страницы руководства POSIX также, как правило, более подробные, чем стандартные страницы руководства системы Linux (читайте оба).
WRT для операций с файлами на других (не-POSIX) платформах, они будут иметь свои собственные реализации. К сожалению, такие вещи не прозрачно переносятся в стандартном C. В потоках С++ есть более стандартизованная обработка ошибок.