getcwd(3) Library Functions Manual getcwd(3) BEZEICHNUNG getcwd, getwd, get_current_dir_name - das aktuelle Verzeichnis abfragen BIBLIOTHEK Standard-C-Bibliothek (libc, -lc) UBERSICHT #include char *getcwd(char Puffer[.Grosse], size_t Grosse); 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 abschliessender Null zuruck, die einen absoluten Pfadnamen enthalt, der dem aktuellen Arbeitsverzeichnis des aufrufenden Prozesses entspricht. Der Pfadname wird als das Funktionsergebnis und, falls vorhanden, uber das Argument Puffer zuruckgegeben. Die Funktion getcwd() kopiert den absoluten Pfadnamen des aktuellen Arbeitsverzeichnisses in das Feld, auf das Puffer zeigt und das Grosse Byte lang ist. Falls die Lange des absoluten Pfadnamens des Arbeitsverzeichnisses, einschliesslich abschliessender Null Grosse Byte uberschreitet, wird NULL zuruckgegeben und errno auf ERANGE gesetzt. Eine Anwendung sollte prufen, ob dieser Fehler auftrat und falls notig einen grosseren 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 Lange Grosse, sofern Grosse nicht Null ist, wenn die fur Puffer notige Grosse reserviert ist. Der Aufrufende sollte den zuruckgegebenen Puffer mit free(3) freigeben. get_current_dir_name() wird mit malloc(3) ein Feld reservieren, das gross genug ist, um den absoluten Pfadnamen des aktuellen Arbeitsverzeichnisses aufzunehmen. Wenn die Umgebungsvariable PWD gesetzt ist und ihr Wert stimmt, dann wird dieser Wert zuruckgegeben. Der Aufrufende sollte den zuruckgegebenen Puffer mit free(3) freigeben. getwd() reserviert keinen Speicher mit malloc(3). Das Argument Puffer sollte ein Zeiger auf ein Feld mit einer Mindestlange von PATH_MAX Byte sein. Falls die Lange des absoluten Pfadnamens des aktuellen Arbeitsverzeichnisses einschliesslich des abschliessenden Nullbytes PATH_MAX Byte uberschreitet, wird NULL zuruckgegeben und errno auf ENAMETOOLONG gesetzt. (Beachten Sie, dass PATH_MAX auf einigen Systemen zur Kompilierzeit moglicherweise keine Konstante ist; ausserdem hangt ihr Wert vom Dateisystem ab - siehe pathconf(3).) Aus Grunden der Portierbarkeit und Sicherheit ist die Benutzung von getwd() missbilligt. RUCKGABEWERT Bei Erfolg geben diese Funktionen einen Zeiger auf eine Zeichenkette zuruck, die den Pfadnamen des aktuellen Arbeitsverzeichnisses enthalt. Im Fall von getcwd() und getwd() ist dies der gleiche Wert wie Puffer. Bei einem Fehlschlag geben diese Funktionen NULL zuruck 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 fur einen Bestandteil des Dateinamens wurde verweigert. EFAULT Puffer zeigt auf eine falsche Adresse. EINVAL Das Argument Grosse ist Null und Puffer ist kein Nullzeiger. EINVAL getwd(): Puffer ist NULL. ENAMETOOLONG getwd(): Die Grosse des absoluten Pfadnamens mit abschliessendem Nullbyte uberschreitet PATH_MAX Byte. ENOENT Der Link auf das aktuelle Arbeitsverzeichnis wurde gelost. ENOMEM Speicher aufgebraucht. ERANGE Das Argument Grosse ist kleiner als die Lange des absoluten Pfadnamens des aktuellen Arbeitsverzeichnisses einschliesslich abschliessendem Nullbyte. Sie mussen ein grosseres Feld reservieren und es erneut versuchen. ATTRIBUTE Siehe attributes(7) fur eine Erlauterung der in diesem Abschnitt verwandten Ausdrucke. +----------------------------+-------------------------+---------------+ |Schnittstelle | Attribut | Wert | +----------------------------+-------------------------+---------------+ |getcwd(), getwd() | Multithread-Fahigkeit | MT-Sicher | +----------------------------+-------------------------+---------------+ |get_current_dir_name() | Multithread-Fahigkeit | MT-Sicher env | +----------------------------+-------------------------+---------------+ VERSIONEN Das Verhalten von getcwd() unter POSIX.1-2001 ist nicht spezifiziert, wenn Puffer NULL ist. POSIX.1-2001 definiert keinerlei Fehler fur getwd(). VERSIONEN Unterschiede C-Bibliothek/Kernel Unter Linux stellt der Kernel einen Systemaufruf getcwd() bereit, den die in dieser Seite beschriebenen Funktionen falls moglich benutzen. Der Systemaufruf akzeptiert die gleichen Argumente wie die Bibliotheksfunktion des gleichen Namens, aber sie ist darauf begrenzt, maximal PATH_MAX Byte zuruckzuliefern. (Vor Linux 3.12 war die Begrenzung der Grosse des zuruckgelieferten Pfadnamens die Systemseitengrosse. Auf vielen Architekturen sind sowohl PATH_MAX als auch die Systemseitengrosse beide 4096 Byte, aber einige Architekturen haben eine grossere Seitengrosse.) Falls die Lange des Pfadnamens des aktuellen Arbeitsverzeichnisses dies Begrenzung uberschreitet, dann schlagt der Systemaufruf mit dem Fehler ENAMETOOLONG fehl. In diesem Fall fallt die Bibliotheksfunktion auf eine (langsamere) alternative Implementierung zuruck, die den kompletten Pfadnamen zuruckliefert. Folgend einer Anderung in Linux 2.6.36 wird dem durch den Systemaufruf getcwd() zuruckgelieferten 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 Einhangenamensraum gewechselt hat. Beim Umgang mit Pfadnamen von nichtvertrauenswurdigen Quellen sollten Aufrufende von in dieser Seite beschriebenen Funktionen in Betracht ziehen, zu uberprufen, ob der zuruckgelieferte Pfadname mit >>/<< oder mit >>(<< anfangt, um zu vermeiden, dass ein nicht erreichbarer Pfad als relativer Pfadname misinterpretiert wird. STANDARDS getcwd() POSIX.1-2008. get_current_dir_name() GNU. getwd() Keine. GESCHICHTE getcwd() POSIX.1-2001. getwd() POSIX.1-2001, aber als VERALTET markiert. Wurde in POSIX.1-2008 entfernt. Verwenden Sie stattdessen getcwd(). Unter Linux nutzen diese Funktionen den Systemaufruf getcwd() (verfugbar seit 2.1.92). Auf alteren Systemen wurden sie /proc/self/cwd abfragen. Falls sowohl der Systemaufruf, als auch das >>proc<<-Dateisystem fehlen, wird eine allgemeine Implementierung aufgerufen. Nur in diesem Fall konnen diese Systemaufrufe unter Linux mit EACCES fehlschlagen. ANMERKUNGEN Diese Funktionen werden oft benutzt, um den Ort des aktuellen Arbeitsverzeichnisses zum Zweck der spateren Ruckkehr zu speichern. Das aktuelle Verzeichnis >>.<< zu offnen und fchdir(2) zur Ruckkehr aufzurufen ist normalerweise schneller und eine zuverlassigere Alternative, wenn ausreichend viele Dateideskriptoren zur Verfugung stehen, besonders auf anderen Plattformen als Linux. FEHLER Seit der Anderung in Linux 2.6.36, die >>(unreachable)<< in den oben beschriebenen Gegebenheiten hinzufugte, ist Glibcs Implementierung von getcwd() nicht mehr mit POSIX konform und liefert einen relativen Pfadnamen zuruck, 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) UBERSETZUNG Die deutsche Ubersetzung dieser Handbuchseite wurde von Martin Schulze , Chris Leick , Mario Blattermann und Helge Kreutzmann erstellt. Diese Ubersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezuglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG ubernommen. Wenn Sie Fehler in der Ubersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Ubersetzer . Linux man-pages 6.06 31. Oktober 2023 getcwd(3)