jammy (2) link.2.gz

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