Provided by: manpages-de-dev_2.5-1_all bug

BEZEICHNUNG

       link, linkat - erzeugt einen neuen Verweis auf eine Datei

Ü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 olddirfd, const char *alterpfad,
                  int newdirfd, const char *neuerpfad, int Schalter);

   Mit Glibc erforderliche 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 newpath 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 olddirfd 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  olddirfd  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 olddirfd ignoriert.

       Die Interpretation von neuerpfad ist wie bei alterpfad, außer dass ein relativer  Pfadname
       als   relativ  zu  dem  durch  den  Dateideskriptor  newdirfd  referenzierten  Verzeichnis
       interpretiert wird.

       Die folgenden Werte können durch bitweises ODER in Schalter gesetzt werden:

       AT_EMPTY_PATH (seit Linux 2.6.39)
              Falls oldpath eine leere Zeichenkette ist, wird ein Verweis auf die durch  olddirfd
              referenzierte  Datei  (die mittels des Schalter open(2) O_PATH erhalten worden sein
              kann) angelegt. In diesem Fall kann sich olddirfd 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  Kernel  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
       entsprechend gesetzt.

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  Quota  (Plattenkontingent) des Benutzers an Plattenblöcken auf dem Dateisystem
              ist erschöpft.

       EEXIST newpath 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 oldpath  oder  newpath  wurden  zu  viele  symbolische  Links
              gefunden.

       EMLINK Die  durch oldpath 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
              oldpath oder newpath 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  oldpath ist als unveränderlich oder nur-anhängbar markiert (siehe ioctl_iflags(2)).

       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ängepunkte hinweg,
              selbst wenn das gleiche Dateisystem an beiden eingehängt ist.)

       Die folgenden zusätzlichen Fehler können bei linkat() auftreten:

       EBADF  olddirfd oder newdirfd ist kein 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 alterpfad  ist  ein relativer Pfadname und olddirfd bezieht sich auf ein gelöschtes
              Verzeichnis, oder neuerpfad ist ein relativer Pfadname und  newdirfd  bezieht  sich
              auf ein gelöschtes Verzeichnis.

       ENOTDIR
              alterpfad ist relativ und olddirfd ist ein Dateideskriptor, der sich auf eine Datei
              bezieht, die kein Verzeichnis ist; gilt analog für neuerpfad and newdirfd.

       EPERM  AT_EMPTY_PATH wurde in Schalter angegeben, alterpfad ist  eine  leere  Zeichenkette
              und olddirfd bezieht sich auf ein Verzeichnis.

VERSIONEN

       linkat()  wurde  zu  Linux in Kernel 2.6.16 hinzugefügt; Bibliotheksunterstützung wurde zu
       Glibc in Version 2.4 hinzugefügt.

KONFORM ZU

       link(): SVr4, 4.3BSD, POSIX.1-2001 (lesen Sie aber auch die ANMERKUNGEN), POSIX.1-2008.

       linkat(): POSIX.1-2008.

ANMERKUNGEN

       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 Kernel 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().

   Anmerkungen zur 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  olddirfd  und
       newdirfd entsprechen.

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)

KOLOPHON

       Diese Seite  ist  Teil  der  Veröffentlichung  4.15  des  Projekts  Linux-man-pages.  Eine
       Beschreibung  des  Projekts,  Informationen,  wie  Fehler gemeldet werden können sowie die
       aktuelle Version dieser Seite finden sich unter https://www.kernel.org/doc/man-pages/.

Ü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 <debian-l10n-german@lists.debian.org>.