Definition | #include <unistd.h> int symlink(const char *path1, const char *path2); int symlinkat(const char *path1, int fd, const char *path2); |
Beschreibung | symlink() erzeugt einen symbolischen Verweis. Sein Name ist der Pfadname, auf den durch path2 verwiesen wird. Dieser Pfadname darf nicht identisch sein mit dem Namen einer schon existierenden Datei bzw. eines symbolischen Verweises. Der Inhalt des symbolischen Verweises ist die Zeichenkette, auf die durch path1 verwiesen wird. Ein symbolischer Verweis kann sich auch auf ein anderes Dateisystem beziehen. Die Datei, die durch path1 bezeichnet wird, muss nicht vorhanden sein.
Die Datei, auf die der symbolische Verweis zeigt, wird verwendet, wenn mit dem Verweis eine open() -Operation durchgeführt wird. Ein stat() auf einen symbolischen Verweis liefert die Datei, auf die verwiesen wird, während ein lstat() Informationen über den Verweis selbst liefert. Dies kann zu überraschenden Ergebnissen führen, wenn ein symbolischer Verweis auf ein Verzeichnis erzeugt wird. Um in Programmen diese ungewünschten Effekte zu reduzieren, kann der Aufruf readlink() verwendet werden, um den Inhalt eines symbolischen Verweises zu lesen. Die Funktion symlinkat() ist äquivalent zu der Funktion symlink() , außer wenn der Parameter path2 einen relativen Pfad spezifiziert. In diesem Fall wird der symbolische Verweis nicht im aktuellen Dateiverzeichnis, sondern in dem mit dem Dateideskriptor fd verbundenen Dateiverzeichnis erstellt. Wurde der Dateideskriptor ohne O_SEARCH geöffnet, prüft die Funktionen, 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. Wenn der Funktion symlinkat() für den Parameter fd der Wert AT_FDCWD übergeben wurde, wird das aktuelle Dateiverzeichnis benutzt. |
Returnwert | 0 | bei Erfolg. |
| -1 | bei Fehler. errno wird gesetzt, um den Fehler anzuzeigen. |
Fehler | symlink() und symlinkat() schlagen fehl, wenn gilt:
|
| EACCES
| Fehlende Schreiberlaubnis im Dateiverzeichnis, in dem der symbolische Verweis erstellt wurde. Die Sucherlaubnis für eine Komponente des Pfadpräfixes von path2 existiert nicht. |
| EEXIST
| Die Datei bzw. der symbolische Verweis, durch path2 angegeben, existiert bereits. |
| ENOTDIR
| Eine Komponente des Pfadpräfixes von path2 ist kein Verzeichnis. |
| EIO
| Beim Lesen oder Schreiben des Dateisystems trat ein Ein-/Ausgabe-Fehler auf. |
| ELOOP
| Zu viele symbolische Verweise traten beim Übersetzen von path2 auf. |
| ENAMETOOLONG
|
|
| Die Länge von path1 oder path2 überschreitet {PATH_MAX} , oder die Länge einer Komponente von path1 oder path2 überschreitet {NAME_MAX} . Evtl. schlägt symlink() auch fehl, wenn die Auflösung des symbolischen Verweises ein Ergebnis erzeugt, dessen Länge {PATH_MAX} überschreitet. |
| ENOENT
| Eine Komponente des Pfadnamenpräfixes von path2 existiert nicht oder p path2 ist eine leere Zeichenkette. |
| ENOSPC
| Das Verzeichnis, in dem der Eintrag für den neuen symbolischen Verweis erzeugt werden soll, kann nicht erweitert werden, da auf dem Dateisystem des Verzeichnisses kein Speicherplatz mehr frei ist. Der neue symbolische Verweis kann nicht erzeugt werden, da kein Speicherplatz mehr auf dem Dateisystem verfügbar ist, das den Verweis enthalten soll. Es gibt keine freien Indexeinträge auf dem Dateisystem, auf dem die Datei erzeugt werden soll. |
| EROFS
| Der neue symbolische Verweis würde sich auf einem Dateisystem befinden, das nur lesbar ist. |
| Erweiterung |
| EDQUOT
| Das Verzeichnis, in dem sich der Eintrag für den neuen symbolischen Verweis befinden soll, kann nicht erweitert werden, da die maximale Anzahl der Plattenblöcke des Benutzers für das Dateisystem überschritten wurde. Der neue symbolische Verweis kann nicht erzeugt werden, da die maximale Anzahl der Plattenblöcke des Benutzers für das Dateisystem, welches den Verweis enthalten soll, überschritten wurde. Die maximale Anzahl von Indexeinträgen des Benutzers auf dem Dateisystem, auf dem die Datei erzeugt werden soll, wurde überschritten. |
| EFAULT
| path1 oder path2 weisen über den zugewiesenen Adressraum des Prozesses hinaus. |
| ENOSYS
| Das Dateisystem unterstützt keine symbolischen Verweise. (Ende) |
| Zusätzlich schlägt symlinkat() fehl, wenn gilt: |
| EACCES
| Der Dateideskriptor fd wurde nicht mit O_SEARCH geöffnet und die dem Dateiverzeichnis zugrunde liegenden Berechtigungen erlauben nicht das Durchsuchen des Dateiverzeichnisses. |
| EBADF
| Der Parameter path2 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 path2 spezifiziert keinen absoluten Pfadnamen und der Dateideskriptor fd ist nicht mit einem Dateiverzeichnis verbunden. |
Hinweis | symlink() und symlinkat() werden nur für POSIX-Dateien ausgeführt.
|
Siehe auch | lchown() , link() , lstat() , open() , readlink() , fcntl.h , unistd.h , Kommando cp in „POSIX-Kommandos“.
|