Provided by: manpages-de-dev_4.15.0-9_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
       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
              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ä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

       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.13  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⟩.