Всегда ли stdio устанавливает значение errno?

Когда поток stdioсталкивается с ошибкой (но не EOF), индикатор ошибки потока будет установлен так, что ferror ()вернет ненулевое значение. Я всегда предполагал, что больше информации доступно в errno. Но откуда я это знаю?

Документация по некоторым функциям [например. man fopenпод Linux] говорит, что также будет установлено errno. Однако man fgetsвообще не упоминает errno. Информационные страницы glibc обнадеживают:

В дополнение к установке индикатора ошибки, связанного с поток, функции, работающие с потоками, также устанавливают `errno' в так же, как и соответствующие низкоуровневые функции, работающие с файлом дескрипторы.

Но я понятия не имею, насколько сильна эта гарантия. Требуется ли это по стандарту C? Что происходит в Visual C/C++?

10
задан Adrian Ratnapala 2 July 2012 в 12:48
поделиться