Provided by: manpages-de-dev_4.15.0-9_all bug

BEZEICHNUNG

       getcwd, getwd, get_current_dir_name - das aktuelle Verzeichnis abfragen

ÜBERSICHT

       #include <unistd.h>

       char *getcwd(char *Puffer, size_t Größe);
       char *getwd(char *Puffer);
       char *get_current_dir_name(void);

   Mit Glibc erforderliche Makros (siehe feature_test_macros(7)):

       get_current_dir_name():
           _GNU_SOURCE

       getwd():
           Seit Glibc 2.12:
               (_XOPEN_SOURCE >= 500) && ! (_POSIX_C_SOURCE >= 200809L)
                   || /* Glibc seit 2.19: */ _DEFAULT_SOURCE
                   || /* Glibc <= 2.19: */ _BSD_SOURCE
           Vor Glibc 2.12:
               _BSD_SOURCE || _XOPEN_SOURCE >= 500

BESCHREIBUNG

       Diese  Funktionen  geben  eine  Zeichenkette  mit  abschließender  Null  zurück, die einen
       absoluten  Pfadnamen  enthält,  der  dem  aktuellen  Arbeitsverzeichnis  des   aufrufenden
       Prozesses  entspricht.  Der  Pfadname wird als das Funktionsergebnis und, falls vorhanden,
       über das Argument Puffer zurückgegeben.

       Die Funktion getcwd() kopiert den absoluten Pfadnamen des aktuellen  Arbeitsverzeichnisses
       in das Feld, auf das Puffer zeigt und das Größe Byte lang ist.

       Falls  die  Länge  des  absoluten  Pfadnamens  des  Arbeitsverzeichnisses,  einschließlich
       abschließender Null Größe Byte überschreitet, wird NULL zurückgegeben und errno auf ERANGE
       gesetzt.  Eine  Anwendung  sollte  prüfen,  ob dieser Fehler auftrat und falls nötig einen
       größeren Puffer reservieren.

       Als eine Erweiterung des POSIX.1-2001-Standards reserviert getcwd()  der  Linux-Glibc  den
       Puffer  dynamisch durch Verwendung von malloc(3), wenn Puffer NULL ist. In diesem Fall hat
       der reservierte Puffer die Länge Größe, sofern Größe nicht Null ist, wenn die  für  Puffer
       nötige  Größe reserviert ist. Der Aufrufende sollte den zurückgegebenen Puffer mit free(3)
       freigeben.

       get_current_dir_name() wird mit malloc(3) ein Feld reservieren, das groß genug ist, um den
       absoluten   Pfadnamen   des   aktuellen   Arbeitsverzeichnisses   aufzunehmen.   Wenn  die
       Umgebungsvariable  PWD  gesetzt  ist  und  ihr  Wert  stimmt,  dann   wird   dieser   Wert
       zurückgegeben. Der Aufrufende sollte den zurückgegebenen Puffer mit free(3) freigeben.

       getwd()  reserviert  keinen  Speicher mit malloc(3). Das Argument Puffer sollte ein Zeiger
       auf ein Feld mit einer Mindestlänge von PATH_MAX Byte sein. Falls die Länge des  absoluten
       Pfadnamens   des   aktuellen   Arbeitsverzeichnisses   einschließlich  des  abschließenden
       NULL-Bytes PATH_MAX Byte überschreitet, wird NULL zurückgegeben und errno auf ENAMETOOLONG
       gesetzt.   (Beachten   Sie,   dass   PATH_MAX   auf  einigen  Systemen  zur  Kompilierzeit
       möglicherweise keine Konstante ist; außerdem hängt ihr Wert vom  Dateisystem  ab  –  siehe
       pathconf(3).)  Aus Gründen der Portierbarkeit und Sicherheit ist die Benutzung von getwd()
       missbilligt.

RÜCKGABEWERT

       Bei Erfolg geben diese Funktionen einen Zeiger  auf  eine  Zeichenkette  zurück,  die  den
       Pfadnamen  des  aktuellen  Arbeitsverzeichnisses enthält. Im Fall von getcwd() und getwd()
       ist dies der gleiche Wert wie Puffer.

       Bei einem Fehlschlag geben diese Funktionen Null zurück und errno wird so gesetzt, dass es
       den  Fehler  anzeigt.  Der  Inhalt  des Feldes, auf den Puffer zeigt, ist bei einem Fehler
       nicht definiert.

FEHLER

       EACCES Lese- oder Suchberechtigung für einen Bestandteil des Dateinamens wurde verweigert.

       EFAULT Puffer zeigt auf eine falsche Adresse.

       EINVAL Das Argument Größe ist Null und Puffer ist kein Null-Zeiger.

       EINVAL getwd(): Puffer ist NULL.

       ENAMETOOLONG
              getwd(): Die Größe des absoluten Pfadnamens mit abschließender  Null  überschreitet
              PATH_MAX Byte.

       ENOENT Der Link auf das aktuelle Arbeitsverzeichnis wurde gelöst.

       ENOMEM Speicher aufgebraucht.

       ERANGE Das Argument Größe ist kleiner als die Länge des absoluten Pfadnamens des aktuellen
              Arbeitsverzeichnisses  einschließlich  abschließendem  NULL-Byte.  Sie  müssen  ein
              größeres Feld reservieren und es erneut versuchen.

ATTRIBUTE

       Siehe attributes(7) für eine Erläuterung der in diesem Abschnitt verwandten Ausdrücke.

       ┌───────────────────────────────────────────────────┬───────────────────────┬─────────────┐
       │SchnittstelleAttributWert        │
       ├───────────────────────────────────────────────────┼───────────────────────┼─────────────┤
       │getcwd(), getwd()                                  │ Multithread-Fähigkeit │ MT-Safe     │
       ├───────────────────────────────────────────────────┼───────────────────────┼─────────────┤
       │get_current_dir_name()                             │ Multithread-Fähigkeit │ MT-Safe env │
       └───────────────────────────────────────────────────┴───────────────────────┴─────────────┘

KONFORM ZU

       getcwd() ist konform zu POSIX.1-2001. Beachten Sie jedoch, dass das Verhalten von getcwd()
       unter POSIX.1-2001 nicht spezifiziert ist, wenn Puffer NULL ist.

       getwd() ist in POSIX.1-2001 vorhanden, aber als VERALTET markiert.  POSIX.1-2008  entfernt
       die  Spezifikation  von getwd(). Benutzen Sie stattdessen getcwd(). POSIX.1-2001 definiert
       keine Fehler für getwd().

       get_current_dir_name() ist eine GNU-Erweiterung.

ANMERKUNGEN

       Unter Linux nutzen diese Funktionen den Systemaufruf getcwd() (verfügbar seit 2.1.92). Auf
       älteren  Systemen  würden  sie /proc/self/cwd abfragen. Falls sowohl der Systemaufruf, als
       auch das »proc«-Dateisystem fehlen, wird eine allgemeine Implementierung  aufgerufen.  Nur
       in diesem Fall können diese Systemaufrufe unter Linux mit EACCES fehlschlagen.

       Diese  Funktionen  werden  oft benutzt, um den Ort des aktuellen Arbeitsverzeichnisses zum
       Zweck der späteren Rückkehr zu speichern. Das  aktuelle  Verzeichnis  ».«  zu  öffnen  und
       fchdir(2)  zur  Rückkehr  aufzurufen  ist  normalerweise schneller und eine zuverlässigere
       Alternative, wenn ausreichend viele Dateideskriptoren zur Verfügung stehen, besonders  auf
       anderen Plattformen als Linux.

   Unterschiede C-Bibliothek/Kernel
       Unter  Linux stellt der Kernel einen Systemaufruf getcwd() bereit, den die in dieser Seite
       beschriebenen Funktionen falls möglich benutzen. Der Systemaufruf akzeptiert die  gleichen
       Argumente  wie  die Bibliotheksfunktion des gleichen Namens, aber sie ist darauf begrenzt,
       maximal PATH_MAX Byte zurückzuliefern. (Vor Linux 3.12 war die Begrenzung  der  Größe  des
       zurückgelieferten  Pfadnamens  die Systemseitengröße. Auf vielen Architekturen sind sowohl
       PATH_MAX als auch die Systemseitengröße beide 4096 Byte, aber einige  Architekturen  haben
       eine    größere   Seitengröße.)   Falls   die   Länge   des   Pfadnamens   des   aktuellen
       Arbeitsverzeichnisses dies Begrenzung überschreitet, dann schlägt der Systemaufruf mit dem
       Fehler   ENAMETOOLONG  fehl.  In  diesem  Fall  fällt  die  Bibliotheksfunktion  auf  eine
       (langsamere)  alternative   Implementierung   zurück,   die   den   kompletten   Pfadnamen
       zurückliefert.

       Folgend  einer  Änderung  in  Linux  2.6.36  wird  dem  durch  den  Systemaufruf  getcwd()
       zurückgelieferten Pfadnamen die  Zeichenkette  »(unreachable)«  vorangestellt,  falls  das
       aktuelle  Verzeichnis nicht unterhalb des Wurzelverzeichnisses des aktuellen Prozesses ist
       (z.B. da der Prozess auf eine neue Dateisystemwurzel mittels chroot(2) gesetzt wurde, ohne
       sein  aktuelles  Verzeichnis  in  die neue Wurzel zu wechseln). Dieses Verhalten kann auch
       durch  einen  nichtprivilegierten  Benutzer  hervorgerufen  werden,   der   das   aktuelle
       Verzeichnis  in einen anderen Einhängenamensraum gewechselt hat. Beim Umgang mit Pfadnamen
       von nichtvertrauenswürdigen Quellen sollten Aufrufende von in dieser  Seite  beschriebenen
       Funktionen  in  Betracht  ziehen,  zu überprüfen, ob der zurückgelieferte Pfadname mit »/«
       oder mit »(« anfängt, um zu vermeiden, dass ein  nicht  erreichbarer  Pfad  als  relativer
       Pfadname misinterpretiert wird.

FEHLER

       Seit  der  Änderung  in  Linux  2.6.36,  die  »(unreachable)«  in  den  oben beschriebenen
       Gegebenheiten hinzufügte, ist Glibcs Implementierung von getcwd()  nicht  mehr  mit  POSIX
       konform und liefert einen relativen Pfadnamen zurück, wenn der API-Vertrag einen absoluten
       Pfadnamen verlangt. Ab Glibc 2.27 ist dies korrigiert: ein Aufruf von getcwd()  von  solch
       einem Pfadnamen liefert jetzt einen Fehlschlag mit ENOENT.

SIEHE AUCH

       pwd(1), chdir(2), fchdir(2), open(2), unlink(2), free(3), malloc(3)

KOLOPHON

       Diese  Seite  ist  Teil  der  Veröffentlichung  5.13  des  Projekts  Linux-man-pages. Eine
       Beschreibung des Projekts, Informationen, wie Fehler  gemeldet  werden  können  sowie  die
       aktuelle Version dieser Seite finden sich unter https://www.kernel.org/doc/man-pages/.

ÜBERSETZUNG

       Die    deutsche    Übersetzung    dieser    Handbuchseite   wurde   von   Martin   Schulze
       <joey@infodrom.org>,    Chris    Leick     <c.leick@vollbio.de>,     Mario     Blättermann
       <mario.blaettermann@gmail.com> und Helge Kreutzmann <debian@helgefjell.de> erstellt.

       Diese  Übersetzung  ist  Freie  Dokumentation;  lesen  Sie  die GNU General Public License
       Version 3 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ 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 ⟨debian-l10n-german@lists.debian.org⟩.