link(2) | System Calls Manual | link(2) |
link, linkat - erzeugt einen neuen Verweis auf eine Datei
Standard-C-Bibliothek (libc, -lc)
#include <unistd.h>
int link(const char *alterpfad, const char *neuerpfad);
#include <fcntl.h> /* Definition der AT_*-Konstanten */ #include <unistd.h>
int linkat(int altVerzdd, const char *alterpfad, int neuVerzdd, const char *neuerpfad, int Schalter);
linkat():
Seit Glibc 2.10: _POSIX_C_SOURCE >= 200809L Vor Glibc 2.10: _ATFILE_SOURCE
link erzeugt einen neuen Verweis (auch bekannt als harter Verweis) auf eine bestehende Datei.
Wenn neuerpfad existiert, wird es nicht überschrieben.
Dieser neue Name kann genauso wie der alte Name für alle Aktionen benutzt werden. Beide Namen zeigen auf die gleiche Datei (haben somit die gleichen Rechte und Eigentümer) und es ist unmöglich festzustellen, welcher Name das »Original« ist.
Der Systemaufruf linkat() funktioniert genau wie link() außer den hier beschriebenen Unterschieden.
Falls der an alterpfad übergebene Pfadname relativ ist wird er relativ zu dem von dem Dateideskriptor altVerzdd referenzierten Verzeichnis interpretiert (statt relativ zu dem aktuellen Arbeitsverzeichnis des aufrufenden Prozesses, wie es bei link() für einen relativen Pfadnamen erfolgt).
Falls alterpfad relativ ist und altVerzdd den besonderen Wert AT_FDCWD annimmt wird alterpfad als relativ zu dem aktuellen Arbeitsverzeichnis des aufrufenden Prozesses interpretiert (wie link()).
Falls alterpfad absolut ist wird altVerzdd ignoriert.
Die Interpretation von neuerpfad ist wie bei alterpfad, außer dass ein relativer Pfadname als relativ zu dem Verzeichnis interpretiert wird, auf das der Dateideskriptor neuVerzdd verweist.
Die folgenden Werte können durch bitweises ODER in Schalter gesetzt werden:
linkat(AT_FDCWD, "/proc/self/fd/<fd>", newdirfd, newname, AT_SYMLINK_FOLLOW);
Vor Linux 2.6.18 wurde das Argument Schalter nicht verwandt und musste als 0 angegeben werden.
Lesen Sie openat(2) für die Erklärung der Notwendigkeit für linkat().
Bei Erfolg wird Null zurückgegeben. Bei einem Fehler wird -1 zurückgegeben und errno gesetzt, um den Fehler anzuzeigen.
Die folgenden zusätzlichen Fehler können bei linkat() auftreten:
open(path, O_TMPFILE | O_EXCL, mode);
linkat() wurde zu Linux in Version 2.6.16 hinzugefügt; Bibliotheksunterstützung wurde zu Glibc in Version 2.4 hinzugefügt.
link(): SVr4, 4.3BSD, POSIX.1-2001 (lesen Sie aber auch die ANMERKUNGEN), POSIX.1-2008.
linkat(): POSIX.1-2008.
Harte Verweise, wie sie mit link() erstellt werden, können sich nicht über mehrere Dateisysteme erstrecken. Benutzen Sie symlink(2), falls nötig.
POSIX.1-2001 legt fest, dass link() alterpfad zurückverfolgen sollte, wenn es ein symbolischer Verweis ist. Seit Version 2.0 tut Linux dies jedoch nicht: Wenn alterpfad ein symbolischer Verweis ist, dann wird neuerpfad als (harter) Verweis auf die gleiche symbolische Verweisdatei erstellt (d.h. neuerpfad bekommt einen symbolischen Verweis auf die gleiche Datei, auf die sich alterpfad bezieht). Einige andere Implementierungen verhalten sich ebenso wie Linux. POSIX.1-2008 ändert die Spezifikation von link(), indem es sie von der Implementierung abhängig macht, egal ob alterpfad zurückverfolgt wird, wenn es ein symbolischer Verweis ist, oder nicht. Für präzise Steuerung der Behandlung symbolischer Verweise bei ihrer Erstellung verwenden Sie linkat().
Mit älteren Kernels, in denen linkat() nicht verfügbar ist, weicht die Glibc-Wrapper-Funktion auf link() aus, außer wenn AT_SYMLINK_FOLLOW angegeben wird. Wenn alterpfad und neuerpfad relative Pfadnamen sind, dann konstruiert die Glibc Pfadnamen, die auf jenen symbolischen Links in /proc/self/fd basieren, die den Argumenten altVerzdd und neuVerzdd entsprechen.
Auf NFS-Dateisystemen kann der Rückgabewert falsch sein, wenn der NFS-Server beim Erzeugen des Verweises abbricht. Prüfen Sie mit stat(2), ob der Verweis angelegt wurde.
ln(1), open(2), rename(2), stat(2), symlink(2), unlink(2), path_resolution(7), symlink(7)
Die deutsche Übersetzung dieser Handbuchseite wurde von Elmar Jansen <ej@pumuckel.gun.de>, Martin Schulze <joey@infodrom.org>, Chris Leick <c.leick@vollbio.de>, Mario Blättermann <mario.blaettermann@gmail.com> und Helge Kreutzmann <debian@helgefjell.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.
5. Februar 2023 | Linux man-pages 6.03 |