[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

perror(), die aktuelle glibc und vielleicht nen bug



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


Reply to: