moin, ich hab da etwas das mich schon ne ganze weile rätseln lässt, die funktion perror() auf aktuellen Debian GNU/Linux Systemen von woody bis sid. Getestet hab ich das folgende auch auf verschiedenen maschinen, i686 (Celeron), AthlonXP, parisc, ppc und sparc (ultra 10), alles wie gesagt unter Debian GNU/Linux mit aktueller glibc und immer der gleiche Effekt. Um was es nun geht: perror() soll ja eine passende und für menschen verständliche Fehlermeldung ausgeben, benutzt dazu die variable errno. Was aber auf den oben stehenden systemen passiert ist, es verändert errno und setzt es auf 29, Illegal Seek. Ich vermute daß es irgendwas treibt, daß diesen Fehler verursacht aber es schaffts trotzdem den ursprünglichen Fehler auszugeben, errno ist hinterher aber nichtmehr das was es vorher war (seitdem es war vorher schon Illegal Seek). ----------------------------------------------- #include <stdio.h> /* für perror() */ #include <errno.h> /* für errno */ int main () { errno = 0; /* errno sollte sowiso auf null stehen, aber das hier um das * nochmal zu betonen */ perror("A"); /* das macht nun irgendwas daß nen Illegal Seek verursacht, * was imho nicht sein sollte */ perror("B"); /* das zeigt nun den error "Illegal Seek" an, der vom * perror() davor, verursacht wurde */ return 0; } ----------------------------------------------- Und was den Verdacht, daß es sich um einen Bug handelt, noch verstärkt ist daß es unter SunOS funktioniert wie ich es erwartete. perror() hat dort errno unverändert gelassen. Auch auf meinem alten 486er auf dem Debian GNU/Linux (alte potato, mit libc6 Version: 2.1.3-17 und linux 2.2.15) lässt es errno in ruhe und verrichtet ordentlich seine Arbeit. Auf anderen Betriebssystemen als Debian GNU/Linux und SunOS(wo es funktionierte) hab ich es noch nicht getestet. Meine Frage: Ists nun nen Bug an der libc den man reporten sollte, oder soll man sich einfach nicht drauf verlassen daß perror() die finger von errno lässt? Bis später... mfg michael -- gpg --keyserver blackhole.pca.dfn.de --recv-key 8F3E77FC
Attachment:
pgpp9MKcehpxb.pgp
Description: PGP signature