unlink(2) System Calls Manual unlink(2) BEZEICHNUNG unlink, unlinkat - loscht einen Namen und unter Umstanden die Datei, auf die dieser verweist BIBLIOTHEK Standard-C-Bibliothek (libc, -lc) UBERSICHT #include int unlink(const char *Pfadname); #include /* Definition der AT_*-Konstanten */ #include int unlinkat(int Verzdd, const char *Pfadname, int Schalter); Mit Glibc erforderliche Feature-Test-Makros (siehe feature_test_macros(7)): unlinkat(): Seit Glibc 2.10: _POSIX_C_SOURCE >= 200809L Vor Glibc 2.10: _ATFILE_SOURCE BESCHREIBUNG unlink() loscht einen Namen aus dem Dateisystem. Falls dieser Name der letzte Link auf eine Datei war und kein Prozess die Datei geoffnet halt, wird sie geloscht und der von ihr belegte Speicherplatz wird fur die erneute Verwendung verfugbar gemacht. Falls dieser Name der letzte Link auf die Datei war, aber diverse Prozesse die Datei noch geoffnet haben, bleibt die Datei bestehen, bis der letzte auf sie weisende Dateideskriptor geloscht wird. Falls der referenzierte Name ein symbolischer Link ist, wird der Link entfernt. Falls der Name auf einen Socket, FIFO oder Gerat verwies, so wird der Name dafur entfernt, aber Prozesse, die das Objekt geoffnet haben, konnen es weiterhin benutzen. unlinkat() Der Systemaufruf unlinkat() funktioniert genau wie entweder unlink() oder rmdir(2) (abhangig davon, ob Schalter den Schalter AT_REMOVEDIR enthalt), ausser den hier beschriebenen Unterschieden. Falls der in Pfadname ubergebene Pfadname relativ ist wird er relativ zu dem im Dateideskriptor Verzdd referenzierten Verzeichnis interpretiert (statt relativ zum aktuellen Arbeitsverzeichnis des aufrufenden Prozesses, wie es bei unlink() und rmdir(2) fur einen relativen Pfadnamen der Fall ist). Falls der in Pfadname ubergebene Pfadname relativ ist und Verzdd den besonderen Wert AT_FDCWD enthalt wird Pfadname relativ zum aktuellen Arbeitsverzeichnis des aufrufenden Prozesses interpretiert (wie bei unlink() und rmdir(2)). Falls der in Pfadname ubergebene Pfadname absolut ist, wird Verzdd ignoriert. Schalter ist eine Bitmaske, die entweder als 0 angegeben werden kann, oder mit durch logisches ODER verknupften Werten der Schalter, die die Wirkung von unlinkat() steuern. Gegenwartig wird nur ein einziger Schalter unterstutzt: AT_REMOVEDIR Standardmassig fuhrt unlinkat() das Aquivalent von unlink() auf Pfadname aus. Falls der Schalter AT_REMOVEDIR angegeben ist, fuhrt es das Aquivalent von rmdir(2) auf Pfadname aus. Lesen Sie openat(2) fur eine Beschreibung der Notwendigkeit von unlinkat(). RUCKGABEWERT Bei Erfolg wird Null zuruckgegeben. Bei einem Fehler wird -1 zuruckgegeben und errno gesetzt, um den Fehler anzuzeigen. FEHLER EACCES Schreibzugriff auf das Verzeichnis, das Pfadname enthalt, ist fur die aktuell effektive UID des Prozesses nicht erlaubt oder eines der Verzeichnisse in Pfadname gewahrt keinen Suchzugriff (siehe auch path_resolution(7)). EBUSY Fur die Datei Pfadname kann der Link nicht gelost werden, weil er vom System oder einem anderen Prozess genutzt wird; beispielsweise, wenn er ein Einhangepunkt ist oder die NFS-Client-Software ihn erstellte, um einen aktiven aber ansonsten namenlosen Inode zu reprasentieren (>>NFS silly renamed<<). EFAULT Pfadname zeigt aus dem fur Sie zuganglichen Adressraum heraus. EIO Es ist ein E/A-Fehler (engl. I/O) aufgetreten. EISDIR Pfadname verweist auf ein Verzeichnis. (Dies ist ein nicht-POSIX-Wert, der von Linux seit 2.1.132 zuruckgegeben wird.) ELOOP Bei der Auflosung von Pfadname wurden zu viele symbolische Verknupfungen gefunden. ENAMETOOLONG Pfadname war zu lang. ENOENT Eine Verzeichniskomponente von Pfadname existiert nicht oder ist ein toter symbolischer Link oder Pfadname ist leer. ENOMEM Es war nicht genugend Kernelspeicher verfugbar. ENOTDIR Eine als Verzeichnis benutzte Komponente von Pfadname ist kein Verzeichnis. EPERM Das System verweigert die Aufhebung von Links zu Verzeichnissen oder fordert Privilegien, die der aufrufende Prozess nicht hat. (Dies ist die von POSIX vorgeschriebene Fehlerruckgabe. Wie oben erwahnt gibt Linux in diesem Fall EISDIR zuruck. EPERM (nur Linux) Das Dateisystem verwehrt das Losen von Dateilinks. EPERM oder EACCES Das Verzeichnis, welches Pfadname enthalt, hat das Sticky Bit (S_ISVTX) gesetzt und die effektive UID des Prozesses ist weder die UID der zu loschenden Datei noch die UID des Verzeichnisses, das die Datei enthalt und der Prozess ist nicht privilegiert (Linux: ihm fehlt die CAP_FOWNER-Capability). EPERM Die Datei, deren Link gelost werden soll, ist unveranderlich oder nur-anhangbar (siehe ioctl_iflags(2)). EROFS Pfadname bezieht sich auf eine Datei auf einem schreibgeschutzten Dateisystem. Die gleichen Fehler, die bei unlink() und rmdir(2) auftreten konnen, konnen auch fur unlinkat() auftreten. Die folgenden zusatzlichen Fehler konnen fur unlinkat() auftreten: EBADF Pfadname ist relativ, aber Verzdd ist weder AT_FDCWD noch ein gultiger Dateideskriptor. EINVAL In Schalter wurde ein ungultiger Schalterwert angegeben. EISDIR Pfadname bezieht sich auf ein Verzeichnis und AT_REMOVEDIR war in Schalter nicht angegeben. ENOTDIR Pfadname ist relativ und Verzdd ist ein Dateideskriptor, der sich auf eine Datei bezieht, die kein Verzeichnis ist. STANDARDS POSIX.1-2008. GESCHICHTE unlink() SVr4, 4.3BSD, POSIX.1-2001. unlinkat() POSIX.1-2008. Linux 2.6.16, Glibc 2.4. Glibc Wenn in alteren Kerneln unlinkat() nicht verfugbar ist, weicht die Glibc-Wrapper-Funktion auf unlink() oder rmdir(2) aus. Wenn Pfadname relativ ist, konstruiert die Glibc einen Pfadnamen, der auf dem symbolischen Link in /proc/self/fd basiert, der dem Verzdd-Argument entspricht. FEHLER Unzulanglichkeiten in dem NFS unterliegenden Protokoll konnen das unerwartete Verschwinden von Dateien, welche noch verwandt werden, verursachen. SIEHE AUCH rm(1), unlink(1), chmod(2), link(2), mknod(2), open(2), rename(2), rmdir(2), mkfifo(3), remove(3), path_resolution(7), symlink(7) UBERSETZUNG Die deutsche Ubersetzung dieser Handbuchseite wurde von Joern Vehoff , Martin Schulze , Martin Eberhard Schauer , Helge Kreutzmann , Mario Blattermann und Dr. Tobias Quathamer 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 unlink(2)