Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

unlink, unlinkat - Verweis löschen

&pagelevel(4)&pagelevel

Definition

#include <unistd.h>

int unlink(const char *path);
int unlinkat(int fd, const char *path,int flag);

Beschreibung

unlink() löscht den Dateiverzeichnis-Eintrag, der durch den Pfadnamen angegeben wird, auf den path zeigt, und vermindert den Verweiszähler der Datei, auf die sich der Dateiver-zeichnis-Eintrag bezieht. Sobald alle Verweise auf eine Datei entfernt worden sind und kein Prozess die Datei geöffnet hat, wird der von der Datei belegte Speicher freigegeben, und die Datei ist fortan nicht mehr zugreifbar. Falls einer oder mehrere Prozesse die Datei während der Entfernung der letzten Verbindung geöffnet haben, wird der von der Datei belegte Speicher nicht freigegeben, bis alle Verweise auf die Datei geschlossen wurden. Wenn path ein symbolischer Verweis ist, wird er entfernt.

path sollte kein Verzeichnis benennen, sofern der Prozess keine entsprechenden Privilegien besitzt. Anwendungen sollten zur Entfernung von Verzeichnissen rmdir() benutzen.

Nach erfolgreicher Durchführung markiert unlink() die Strukturkomponenten st_ctime und st_mtime des übergeordneten Verzeichnisses zum Aktualisieren. Ebenso wird die Strukturkomponente st_ctime der Datei zum Aktualisieren markiert, wenn der Verweiszähler der Datei ungleich null ist.

BS2000
unlink() wird aus Kompatibilitätsgründen weiter unterstützt und bewirkt das Gleiche wie remove(), nämlich das Löschen der Datei (siehe remove()). (Ende)

Die Funktion unlinkat() ist äquivalent zu der Funktion unlink() oder rmdir(), außer wenn der Parameter path einen relativen Pfad spezifiziert. In diesem Fall wird der zu löschende Dateiverzeichnis-eintrag nicht im aktuellen Dateiverzeichnis, sondern in dem mit dem Dateideskriptor fd verbundenen Dateiverzeichnis gesucht. Wurde der Dateideskriptor ohne O_SEARCH geöffnet, prüft die Funktion, ob eine Suche im verbundenen Dateiverzeichnis mit den dem Dateiverzeichnis zugrunde liegenden Berechtigungen erlaubt ist. Wurde der Dateideskriptor mit O_SEARCH geöffnet, unterbleibt die Prüfung.

Im Parameter flag kann der Wert AT_REMOVEDIR übergeben werden, der im Header ffnctl.h definiert ist. In diesem Fall soll durch fd und path ein Dateiverzeichnis spezifiziert werden und keine normale Datei.

Wenn der Funktion unlinkat() für den Parameter fd der Wert AT_FDCWD übergeben wird, wird das aktuelle Dateiverzeichnis benutzt.

Returnwert

0

bei Erfolg.


-1

bei Fehler. errno wird gesetzt, um den Fehler anzuzeigen. Die unter path genannte Datei wird nicht verändert.

Fehler

unlink() und unlinkat() schlagen fehl, wenn gilt:


EACCES

Für eine Komponente des Pfadnamenanfangs existiert kein Durchsuchrecht oder das Schreibrecht wird für das Dateiverzeichnis verweigert, das den zu löschenden Dateiverzeichniseintrag enthält.


EBUSY

Der Eintrag, der entfernt werden soll, ist der Einhängepunkt für ein eingehängtes Dateisystem.


Erweiterung


EFAULT

path weist über den zugewiesenen Adressraum des Prozesses hinaus.


EINTR

Ein Signal wurde während des unlink()-Systemaufrufs aufgefangen.


ELOOP

Bei der Übersetzung von path wurden zu viele symbolische Verbindungen angetroffen. (Ende)


ENAMETOOLONG 



Die Länge von path überschreitet {PATH_MAX}, oder die Länge einer Komponente von path ist größer als {NAME_MAX}.


ENOENT

Die angegebene Datei ist nicht vorhanden oder ist eine leere Zeichenkette. Der Benutzer ist kein Systemverwalter.


ENOTDIR

Eine Komponente von path ist kein Dateiverzeichnis.


EPERM

Die durch path angegebene Datei ist ein Dateiverzeichnis, und der aufrufende Prozess hat keine Sonderrechte.


EROFS

Der zu entfernende Dateiverzeichnis-Eintrag ist Teil eines schreibgeschützten Dateisystems.


Zusätzlich schlägt unlinkat() fehl, wenn gilt: 


EACCES

Der Parameter fd wurde nicht mit O_SEARCH geöffnet und die dem Dateiverzeichnis zugrunde liegenden Berechtigungen erlauben nicht das Durchsuchen des Dateiverzeichnisses.


EBADF

Der Parameter path spezifiziert keinen absoluten Pfadnamen und der Parameter fd hat weder den Wert AT_FDCWD, noch enthält er einen gültigen zum Lesen oder Suchen geöffneten Dateideskriptor.


ENOTDIR

Der Parameter path spezifiziert keinen absoluten Pfadnamen und der Dateideskriptor fd ist nicht mit einem Dateiverzeichnis verbunden, oder der Parameter flag hat den Wert AT_REMOVEDIR und path spezifiziert kein Dateiverzeichnis.


EEXIST oder ENOTEMPTY 



Der Parameter flag hat den Wert AT_REMOVEDIR und path spezifiziert ein nicht leeres Dateiverzeichnis, oder es bestehen von Punkt verschieden Hard-Links auf das Verzeichnis oder mehr als ein Eintrag in Punkt-Punkt.


EINVAL

Der Wert des Parameters flag ist ungültig.

Hinweise

rmdir() wird zum Löschen eines Dateiverzeichnises verwendet.

Ob unlink() oder unlinkat() für eine BS2000- oder eine POSIX-Datei ausgeführt wird, hängt von der Programmumgebung ab.

Siehe auch

close(), link(), remove(), rmdir(), fcntl.h, unistd.h.