Provided by: manpages-de-dev_4.13-4_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-Versionen <= 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.10  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 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.

GNU                                              30. April 2018                                        GETCWD(3)