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