BEZEICHNUNG

realpath - gibt den standardisierten absoluten Pfadnamen zurück

BIBLIOTHEK

Standard-C-Bibliothek ( libc, -lc)

ÜBERSICHT

#include <limits.h>
#include <stdlib.h>
char *realpath(const char *restrict pfad,
               char *restrict aufgeloester_pfad);
Mit Glibc erforderliche Feature-Test-Makros (siehe feature_test_macros(7)):
realpath():
    _XOPEN_SOURCE >= 500
        || /* Glibc >= 2.19: */ _DEFAULT_SOURCE
        || /* Glibc <= 2.19: */ _BSD_SOURCE

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 »..«.
Falls aufgeloester_pfad als NULL angegeben wurde, benutzt realpath() malloc(3), um den Puffer des aufgelösten Pfadnamens von PATH_MAX Byte zu reservieren und gibt einen Zeiger auf diesen Puffer zurück. Der Aufrufende sollte den reservierten Speicher dieses Puffers mit free(3) freigeben.

RÜCKGABEWERT

Wenn kein Fehler auftritt, gibt realpath() einen Zeiger auf aufgeloester_pfad zurück.
Anderenfalls wird ein NULL zurückgegeben, der Inhalt des Feldes aufgeloester_pfad ist unbestimmt und errno wird gesetzt, um den Fehler anzuzeigen.

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
Beim Lesen vom Dateisystem trat ein E/A-Fehler (engl. I/O) auf.
ELOOP
Beim Übersetzen des Pfadnamens wurden zu viele symbolische Links vorgefunden.
ENAMETOOLONG
Eine Komponente eines Pfadnameds überschreitet NAME_MAX Zeichen oder ein ganzer Pfadname überschreitet NAME_MAX Zeichen.
ENOENT
Die angegebene Datei existiert nicht.
ENOMEM
Speicher aufgebraucht.
ENOTDIR
Eine Komponente des Pfad-Präfixes ist kein Verzeichnis.

ATTRIBUTE

Siehe attributes(7) für eine Erläuterung der in diesem Abschnitt verwandten Ausdrücke.
Schnittstelle Attribut Wert
realpath() Multithread-Fähigkeit MT-Safe
 

STANDARDS

4.4BSD, POSIX.1-2001.
Laut POSIX.1-2001 ist das Verhalten, wenn aufgeloester_pfad NULL ist, abhängig von der Implementierung. POSIX.1-2008 spezifiziert das Verhalten, das auf dieser Seite beschrieben wird.

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.)

GNU-Erweiterungen

Falls der Aufruf entweder mit EACCES oder ENOENT fehlschlägt und aufgeloester_pfad nicht NULL ist, wird das Präfix vom pfad, der nicht lesbar ist oder nicht existiert, in aufgeloester_pfad zurückgegeben.

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.

SIEHE AUCH

realpath(1), readlink(2), canonicalize_file_name(3), getcwd(3), pathconf(3), sysconf(3)

ÜBERSETZUNG

Die deutsche Übersetzung dieser Handbuchseite wurde von Patrick Rother <[email protected]>, Chris Leick <[email protected]> und Mario Blättermann <[email protected]> erstellt.
Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.
Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Übersetzer