Provided by: manpages-de-dev_4.21.0-2_all 

BEZEICHNUNG
getcwd, getwd, get_current_dir_name - das aktuelle Verzeichnis abfragen
BIBLIOTHEK
Standard-C-Bibliothek (libc, -lc)
ÜBERSICHT
#include <unistd.h>
char *getcwd(char Puffer[.Größe], size_t Größe);
char *get_current_dir_name(void);
[[veraltet]] char *getwd(char Puffer[PATH_MAX]);
Mit Glibc erforderliche Feature-Test-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 >= 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 Nullbytes 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 Nullzeiger.
EINVAL getwd(): Puffer ist NULL.
ENAMETOOLONG
getwd(): Die Größe des absoluten Pfadnamens mit abschließendem Nullbyte ü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 Nullbyte. 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.
┌─────────────────────────────────────────────────────────────────┬───────────────────────┬─────────────┐
│ Schnittstelle │ Attribut │ Wert │
├─────────────────────────────────────────────────────────────────┼───────────────────────┼─────────────┤
│ getcwd(), getwd() │ Multithread-Fähigkeit │ MT-Safe │
├─────────────────────────────────────────────────────────────────┼───────────────────────┼─────────────┤
│ get_current_dir_name() │ Multithread-Fähigkeit │ MT-Safe env │
└─────────────────────────────────────────────────────────────────┴───────────────────────┴─────────────┘
STANDARDS
getcwd() ist konform zu POSIX.1-2001. Beachten Sie jedoch, dass das Verhalten von getcwd() unter PO‐
SIX.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 Spezifikati‐
on 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 Syste‐
men 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äte‐
ren 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 Biblio‐
theksfunktion 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 Ar‐
chitekturen haben eine größere Seitengröße.) Falls die Länge des Pfadnamens des aktuellen Arbeitsver‐
zeichnisses 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 zu‐
rück, die den kompletten Pfadnamen zurückliefert.
Folgend einer Änderung in Linux 2.6.36 wird dem durch den Systemaufruf getcwd() zurückgelieferten Pfadna‐
men 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 Ver‐
zeichnis in einen anderen Einhängenamensraum gewechselt hat. Beim Umgang mit Pfadnamen von nichtvertrau‐
enswü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üg‐
te, 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 korri‐
giert: 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)
Ü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@hel‐
gefjell.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.
Linux man-pages 6.03 5. Februar 2023 getcwd(3)