Provided by: manpages-de-dev_4.13-4_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 altVerzdd, const char *alterpfad,
                  int neuVerzdd, 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 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  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  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
              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  altVerzdd oder neuVerzdd 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 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

       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  altVerzdd  und
       neuVerzdd 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  5.10  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 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ 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⟩.