table of contents
other sections
REALPATH(3) | Linux-Programmierhandbuch | REALPATH(3) |
BEZEICHNUNG¶
realpath - gibt den standardisierten absoluten Pfadnamen zurückÜBERSICHT¶
#include <limits.h> #include <stdlib.h>char *realpath(const char *pfad, char *aufgeloester_pfad);
Mit Glibc erforderliche Makros (siehe feature_test_macros(7)):
_BSD_SOURCE ||
_XOPEN_SOURCE >= 500 ||
_XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
BESCHREIBUNG¶
realpath expandiert alle symbolischen Links und löst Referenzen auf ».«, »..« und zusätzlichen »/«-Zeichen in der durch Null beendeten Zeichenkette pfad auf, um einen standardisierten absoluten Pfadnamen zu erzeugen. Der resultierende Pfadname wird als Zeichenkette, die durch Null beendet wird, in dem Puffer mit maximal PATH_MAX Byte gespeichert, auf den aufgeloester_pfad zeigt. Der resultierende Pfad enthält weder einen symbolischen Link noch die Komponenten ».« und »..«.RÜCKGABEWERT¶
Wenn kein Fehler auftritt, gibt realpath() einen Zeiger auf aufgeloester_pfad zurück.FEHLER¶
- EACCES
- Der Lese- oder Suchzugriff für eine Komponente des Pfad-Präfixes wurde verweigert.
- EINVAL
- pfad ist NULL. (In Glibc-Versionen vor 2.3 wird dieser Fehler auch zurückgegeben, wenn aufgeloester_pfad NULL ist.)
- EIO
- Während des Lesens aus dem Dateisystem trat ein E/A-Fehler auf.
- ELOOP
- Während der Umwandlung des Pfadnamens traten zu viele symbolische Links auf.
- ENAMETOOLONG
- Eine Komponente eines Pfadnameds überschreitet NAME_MAX Zeichen oder ein ganzer Pfadname überschreitet NAME_MAX Zeichen.
- ENOENT
- Die genannte Datei existiert nicht.
- ENOTDIR
- Eine Komponente des Pfad-Präfixes ist kein Verzeichnis.
VERSIONEN¶
Auf Linux erschien diese Funktion in Libc 4.5.21.KONFORM ZU¶
4.4BSD, POSIX.1-2001.ANMERKUNGEN¶
Auf 4.4BSD und Solaris ist die Längenbeschränkung des Pfadnamens MAXPATHLEN (in <sys/param.h>). SUSv2 schreibt vor, dass PATH_MAX und NAME_MAX in <limits.h> stehen oder von der Funktion pathconf(3) bereitgestellt werden. Ein typischer Quellcode-Ausschnitt könnte wie folgt aussehen#ifdef PATH_MAX path_max = PATH_MAX; #else path_max = pathconf(path, _PC_PATH_MAX); if (path_max <= 0) path_max = 4096; #endif
(Aber lesen Sie den Abschnitt FEHLER.) Der Prototyp von realpath() wird in <unistd.h> in Libc4 und Libc5 angegeben, aber sonst überall in <stdlib.h>.
FEHLER¶
Die POSIX.1-2001-Standardversion dieser Funktion ist durch ihre Bauart kaputt, da es unmöglich ist eine passende Größe des Ausgabepuffers aufgeloester_pfad zu bestimmen. Gemäß POSIX.1-2001 reicht ein Puffer der Größe PATH_MAX aus, aber PATH_MAX muss keine definierte Konstante sein und könnte durch die Benutzung von pathconf(3) erlangt werden. Die Abfrage von pathconf(3) hilft nicht wirklich, da POSIX einerseits warnt, dass das Ergebnis groß und für die Speicherreservierung ungeeignet sein könnte und andererseits könnte pathconf(3) -1 zurückgeben, um zu kennzeichnen, dass PATH_MAX unbegrenzt ist. Die Eigenschaft aufgeloester_pfad == NULL die nicht in POSIX.1-2001, jedoch in POSIX.1-2008 standardisiert ist, ermöglicht es, dieses Bauartproblem zu vermeiden. Die Implementierungen von Libc4 und Libc5 enthielten einen Pufferüberlauf (behoben in Llibc-5.4.13). Daher benötigten SUID-Programme, wie mount(8), eine private Version.SIEHE AUCH¶
readlink(2), canonicalize_file_name(3), getcwd(3), pathconf(3), sysconf(3)KOLOPHON¶
Diese Seite ist Teil der Veröffentlichung 3.42 des Projekts Linux- man-pages. Eine Beschreibung des Projekts und Informationen, wie Fehler gemeldet werden können, finden sich unter http://www.kernel.org/doc/man-pages/.ÜBERSETZUNG¶
Die deutsche Übersetzung dieser Handbuchseite wurde von Patrick Rother <krd@gulu.net> und Chris Leick <c.leick@vollbio.de> erstellt.14. August 2012 |