Когда поток stdio
обнаруживает ошибку (но не EOF), индикатор ошибки потока будет установлен так, что ferror()
вернет ненулевое значение. Я всегда предполагал, что больше информации доступно в errno
. Но откуда я это знаю?Действительно ли stdio всегда задает errno?
Документация для некоторых функций [. man fopen
под Linux] говорит, что errno
также будет установлен. Однако man fgets
не упоминает errno
. В Glibc информационные страницы обнадеживают:
В дополнение к установке индикатора ошибки, связанной с потока, функции, которые работают на потоках, также установленных `ERRNO» в точно так же, как и соответствующие функции низкого уровня, работают с файлами дескрипторы.
Но я не знаю, насколько сильна эта гарантия. Требуется ли это по стандарту C? Что происходит в Visual C/C++?
Спасибо. Определения POSIX очень полезны. Например, в соответствии с ними «fgets» действительно устанавливает errno.Я думаю, что лучшая стратегия для моего конкретного случая - просто написать для POSIX, а затем исправить проблемы с Windows по мере их появления. –