Po napotkaniu przez strumień stdio
błędu (ale nie EOF), wskaźnik błędu strumienia zostanie ustawiony tak, aby ferror()
zwrócił wartość niezerową. Zawsze zakładałem, że więcej informacji jest dostępnych w errno
. Ale skąd mam to wiedzieć?Czy stdio zawsze ustawia errno?
Dokumentacja niektórych funkcji [np. man fopen
pod Linuksem] mówi, że zostanie również ustawiona errno
. Jednak man fgets
w ogóle nie wspomina o errno
. Glibc stron z informacją są pocieszające:
Oprócz ustawiania wskaźnika błędu związanego ze strumieniem funkcje, które działają na strumieniach również zestaw `errno” w sam sposób, jak odpowiadających im funkcji niskopoziomowych działają na deskryptorze pliku .
Ale nie mam pojęcia, jak silna jest ta gwarancja. Czy jest to wymagane przez standard C? Co dzieje się w Visual C/C++?
Dzięki. Definicje POSIX są bardzo pomocne. Na przykład, zgodnie z nimi, "fgets" rzeczywiście ustawia errno.Myślę, że najlepszą strategią dla mojego konkretnego przypadku jest napisanie dla POSIX, a następnie naprawienie problemów z systemem Windows, gdy pojawią się. –