Provided by: manpages-de-dev_4.27.0-1_all 

BEZEICHNUNG
link, linkat - erzeugt einen neuen Verweis auf eine Datei
BIBLIOTHEK
Standard-C-Bibliothek (libc, -lc)
ÜBERSICHT
#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);
Mit Glibc erforderliche Feature-Test-Makros (siehe feature_test_macros(7)):
linkat():
Seit Glibc 2.10:
_POSIX_C_SOURCE >= 200809L
Vor Glibc 2.10:
_ATFILE_SOURCE
BESCHREIBUNG
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.
linkat()
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:
AT_EMPTY_PATH (seit Linux 2.6.39)
Falls alterpfad eine leere Zeichenkette ist, wird ein Verweis auf die durch altVerzdd
referenzierte Datei (die mittels des Schalter open(2) O_PATH erhalten worden sein kann) angelegt.
In diesem Fall kann sich altVerzdd auf jede Art von Datei, außer einem Verzeichnis, beziehen. Dies
funktioniert im Allgemeinen nicht, falls die Datei eine Verweiszahl von Null hat (Dateien, die mit
O_TMPFILE und ohne O_EXCL erstellt wurden, sind eine Ausnahme). Der Aufrufer muss über die
Capability CAP_DAC_READ_SEARCH verfügen, damit er den Schalter verwenden kann. Dieser Schalter ist
Linux-spezifisch; definieren Sie _GNU_SOURCE, um die Definition zu erhalten.
AT_SYMLINK_FOLLOW (seit Linux 2.6.18)
Standardmäßig dereferenziert linkat() alterpfad nicht, falls dieser ein symbolischer Verweis ist
(wie link()). Der Schalter AT_SYMLINK_FOLLOW kann in Schalter angegeben werden, damit alterpfad
dereferenziert wird, falls er ein symbolischer Verweis ist. Falls procfs eingehängt ist, kann dies
als Alternative zu AT_EMPTY_PATH verwandt werden, wie folgt:
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().
RÜCKGABEWERT
Bei Erfolg wird Null zurückgegeben. Bei einem Fehler wird -1 zurückgegeben und errno gesetzt, um den
Fehler anzuzeigen.
FEHLER
EACCES Es besteht kein Schreibzugriff auf das Verzeichnis, das neuerpfad enthält oder es besteht kein
Suchzugriff für eines der Verzeichnisse im Pfad-Präfix von neuerpfad oder alterpfad. (Siehe auch
path_resolution(7).)
EDQUOT Das Plattenkontingent (Quota) des Benutzers an Plattenblöcken auf dem Dateisystem ist erschöpft.
EEXIST neuerpfad ist schon vorhanden.
EFAULT alterpfad oder neuerpfad zeigt aus dem für Sie zugänglichen Adressraum heraus.
EIO Es ist ein E/A-Fehler (engl. I/O) aufgetreten.
ELOOP Bei der Auflösung von alterpfad oder neuerpfad wurden zu viele symbolische Links gefunden.
EMLINK Die durch alterpfad referenzierte Datei hat bereits die maximale Anzahl an Links auf sich.
Beispielsweise ist die Begrenzung der Anzahl der Hartlinks auf eine Datei 65.000 auf einem
ext4(5)-Dateisystem, das nicht die Funktionalität dir_index einsetzt, und unter btrfs(5) ist die
Begrenzung 65.535 Links.
ENAMETOOLONG
alterpfad oder neuerpfad war zu lang.
ENOENT Eine Verzeichniskomponente in alterpfad oder neuerpfad existiert nicht oder ist ein toter
symbolischer Verweis.
ENOMEM Es war nicht genügend Kernelspeicher verfügbar.
ENOSPC Das Gerät, das die die Datei enthält, hat keinen Platz für einen neuen Verzeichniseintrag.
ENOTDIR
Eine Komponente, die in alterpfad oder neuerpfad als Verzeichnis benutzt wird, ist tatsächlich gar
kein Verzeichnis.
EPERM alterpfad ist ein Verzeichnis.
EPERM Das Dateisystem, welches alterpfad und neuerpfad beinhaltet, unterstützt nicht das Erzeugen von
harten Verweisen.
EPERM (seit Linux 3.6)
Der Aufrufende hat nicht das Recht, einen harten Verweis auf diese Datei zu erstellen. (Lesen Sie
die Beschreibung von /proc/sys/fs/protected_hardlinks in proc(5).)
EPERM alterpfad ist als unveränderlich oder nur-anhängbar markiert (siehe FS_IOC_SETFLAGS(2const)).
EROFS Die Datei befindet sich auf einem nur lesbaren Dateisystem.
EXDEV alterpfad und neuerpfad befinden sich nicht auf dem gleichen eingehängten Dateisystem. (Linux
erlaubt es, ein Dateisystem an mehreren Punkten einzuhängen, aber link() funktioniert nicht über
mehrere unterschiedliche Einhängungen hinweg, selbst wenn das gleiche Dateisystem an beiden
eingehängt ist.)
Die folgenden zusätzlichen Fehler können bei linkat() auftreten:
EBADF alterpfad (neuerpfad) ist relativ, aber altVerzdd oder neuVerzdd ist weder AT_FDCWD noch ein
zulässiger Dateideskriptor.
EINVAL In Schalter wurde ein ungültiger Schalterwert angegeben.
ENOENT AT_EMPTY_PATH wurde in Schalter angegeben, aber der Aufrufende hatte nicht die Capability
CAP_DAC_READ_SEARCH.
ENOENT Es wurde versucht, einen Verweis auf /proc/self/fd/NN zu erstellen, das zu dem wie folgt
erstellten Dateideskriptor korrespondiert:
open(path, O_TMPFILE | O_EXCL, mode);
Siehe open(2).
ENOENT Es wurde versucht, einen Verweis auf /proc/self/fd/NN zu erstellen, das zu einer gelöschten Datei
korrespondiert.
ENOENT alterpfad ist ein relativer Pfadname und altVerzdd bezieht sich auf ein gelöschtes Verzeichnis,
oder neuerpfad ist ein relativer Pfadname und neuVerzdd bezieht sich auf ein gelöschtes
Verzeichnis.
ENOTDIR
alterpfad ist relativ und altVerzdd ist ein Dateideskriptor, der sich auf eine Datei bezieht, die
kein Verzeichnis ist; gilt analog für neuerpfad und neuVerzdd.
EPERM AT_EMPTY_PATH wurde in Schalter angegeben, alterpfad ist eine leere Zeichenkette und altVerzdd
bezieht sich auf ein Verzeichnis.
VERSIONEN
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().
Glibc
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.
STANDARDS
link() POSIX.1-2008.
GESCHICHTE
link() SVr4, 4.3BSD, POSIX.1-2001 (aber siehe VERSIONEN).
linkat()
POSIX.1-2008. Linux 2.6.16, Glibc 2.4.
ANMERKUNGEN
Harte Verweise, wie sie mit link() erstellt werden, können sich nicht über mehrere Dateisysteme
erstrecken. Benutzen Sie symlink(2), falls nötig.
FEHLER
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.
SIEHE AUCH
ln(1), open(2), rename(2), stat(2), symlink(2), unlink(2), path_resolution(7), symlink(7)
ÜBERSETZUNG
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: debian-l10n-german@lists.debian.org.
Linux man-pages 6.9.1 13. Juni 2024 link(2)