On Tue, 02 Apr 2002 23:09:06 +0200, Josef Spillner wrote:
Die Funktion getpwnam(), Bestandteil der libc, konform zu 4.3BSD und POSIX,
...
Der Bug befindet sich in der Manpage; diese verschweigt, daß auch EMFILE auftreten kann, weil nämlich für getpwnam() die Datei /etc/passwd geöffnet werden muß, und damit auch bei Mangel an Dateideskriptoren der Aufruf fehlschlagen muß. (Die glibc-2.2.5-Quellen dazu sind nicht wirklich lesbar...)
Wo liegt der Bug nun genau? Manpage oder POSIX oder glibc-Implementation?
Im Manual. Wenn irgendwo Posix steht weiss man nie, was genau gemeint ist. Da gibts viele Versionen und kaum einer hat die Doku dazu. Letztes Jahr ist glücklicherweise (ich hoffe ich habe das richtig verstanden) ein gemeinsamer Nachfolger von SUS V2 und Posix 1003.1* rausgekommen. Das nennt sich SUS V3 oder auch IEEE 1003.1-2001 und die Doku ist praktisch frei verfügbar (eigentlich muß man sich registrieren) Ich denke mal, daß die glibc auf Komaptibilität zu diesem Standard getrimmt wird/wurde. Da steht dann u.a. auch auch EMFILE für getpwnam drin.
http://www.opengroup.org/onlinepubs/007904975/functions/getpwnam.html
Lies mal "issue 6" dort. Daraus kann man ableiten, daß EMFILE usw. in POSIX-kompatiblen libs aus der BSD-Ecke (oder nicht SUS-Ecke) sicherlich fehlen wird. Von daher auch das alte manual.
Da die manpages oft veraltet sind lohnt sich IMO immer ein Blick in die genannte Doku.
SUS V2: http://www.opengroup.org/onlinepubs/007908799/ SUS V3: http://www.opengroup.org/onlinepubs/007904975/
Ich finde die Seiten auch als Info zu /bin/sh, awk, ... ohne GNU-Erweiterungen sehr praktisch.
Reinhard