focal (2) linkat.2.gz

Provided by: manpages-fr-dev_3.65d1p1-1_all bug

NOM

       link, linkat - Créer un nouveau nom pour un fichier

SYNOPSIS

       #include <unistd.h>

       int link(const char *oldpath, const char *newpath);

       #include <fcntl.h> /* Définition des constantes AT_* */
       #include <unistd.h>

       int linkat(int olddirfd, const char *oldpath,
                  int newdirfd, const char *newpath, int flags);

   Exigences de macros de test de fonctionnalités pour la glibc (consultez feature_test_macros(7)) :

       linkat() :
           Depuis la glibc 2.10 :
               _XOPEN_SOURCE >= 700 || _POSIX_C_SOURCE >= 200809L
           Avant la glibc 2.10 :
               _ATFILE_SOURCE

DESCRIPTION

       link() crée un nouveau lien (aussi appelé lien matériel ou hard link) sur un fichier existant.

       Si newpath existe, il ne sera pas écrasé.

       Ce  nouveau  nom pourra être utilisé exactement comme l'ancien quelle que soit l'opération. Les deux noms
       réfèrent au même fichier (et ont donc les mêmes permissions et propriétaire)  et  il  est  impossible  de
       déterminer quel nom était l'original.

   linkat()
       L'appel système linkat() fonctionne exactement comme link(), les seules différences étant celles décrites
       ici.

       Si le chemin donné dans oldpath est relatif, il est interprété par rapport au répertoire référencé par le
       descripteur  de  fichier  olddirfd  (plutôt  que par rapport au répertoire courant du processus appelant,
       comme dans link()).

       Si oldpath est relatif et olddirfd a la valeur spéciale AT_FDCWD, oldpath est interprété relativement  au
       répertoire courant du processus appelant, comme link().

       Si oldpath est un chemin absolu, olddirfd est ignoré.

       L'interprétation de newpath est identique à celle de oldpath, excepté qu'un chemin relatif est interprété
       par rapport au répertoire correspondant à newdirfd.

       Les valeurs suivantes peuvent être combinées avec un OU binaire dans le paramètre flags :

       AT_EMPTY_PATH (depuis Linux 2.6.39)
              Si oldpath est une chaîne vide, créer un lien vers le fichier référencé  par  olddirfd  (qui  peut
              avoir  été  obtenu  en utilisant open(2) avec le drapeau O_PATH). Dans ce cas, olddirfd doit faire
              référence à fichier, et pas à un répertoire. L'appelant doit avoir la capacité CAP_DAC_READ_SEARCH
              pour utiliser cet attribut. Cette sécurité empêche des utilisateurs arbitraires de créer des liens
              matériels en utilisant des descripteurs de fichiers reçus via socket UNIX (consultez la discussion
              au  sujet  de SCM_RIGHTS dans unix(7)). Cet attribut est spécifique à Linux, _GNU_SOURCE doit être
              définie pour obtenir sa définition.

       AT_SYMLINK_FOLLOW (depuis Linux 2.6.18)
              Par défaut, linkat() ne déréférence pas oldpath si c'est un lien symbolique (de même que  link()).
              L'attribut  AT_SYMLINK_FOLLOW peut être passé dans flags pour forcer le déréférencement de oldpath
              si c'est un lien symbolique.

       Avant le noyau 2.6.18, l'argument flags n'était pas utilisé, et devait être nul.

       Consultez openat(2) pour une explication de la nécessité de linkat().

VALEUR RENVOYÉE

       S'il réussit, cet appel système renvoie 0. S'il échoue, il renvoie -1 et remplit errno en conséquence.

ERREURS

       EACCES L'écriture dans le répertoire contenant  newpath  n'est  pas  autorisée  pour  l'UID  effectif  du
              processus,  ou  l'un  des répertoires de oldpath ou newpath ne permet pas le parcours (exécution).
              Consultez aussi path_resolution(7).

       EDQUOT Le quota de blocs de disque de l'utilisateur sur le système de fichiers a été atteint.

       EEXIST newpath existe déjà.

       EFAULT oldpath ou newpath pointent en dehors de l'espace d'adressage accessible.

       EIO    Une erreur d'entrée-sortie s'est produite.

       ELOOP  Trop de liens symboliques ont été rencontrés en parcourant oldpath ou newpath.

       EMLINK Le fichier référencé par oldpath possède déjà le nombre maximal de liens.

       ENAMETOOLONG
              oldpath ou newpath est trop long.

       ENOENT Un répertoire contenu dans oldpath ou newpath n'existe pas, ou est  un  lien  symbolique  pointant
              nulle part.

       ENOMEM Pas assez de mémoire pour le noyau.

       ENOSPC Le périphérique contenant le fichier n'a pas de place pour une nouvelle entrée de répertoire.

       ENOTDIR
              Un élément du chemin d'accès oldpath ou newpath n'est pas réellement un répertoire.

       EPERM  oldpath est un répertoire.

       EPERM  Le système de fichiers contenant oldpath et newpath ne permet pas la création de liens matériels.

       EPERM (depuis Linux 3.6)
              L'appelant n'a pas le droit de créer un lien matériel vers ce fichier (consultez la description de
              /proc/sys/fs/protected_hardlinks dans proc(5)).

       EROFS  Le fichier se trouve sur un système de fichiers en lecture seule.

       EXDEV  oldpath et newpath ne résident pas sur le même système de fichiers. (Linux  permet  de  monter  un
              système  de fichiers à différents endroits, mais link() ne fonctionne pas sur différents points de
              montage, même si le système de fichiers sous‐jacent est le même.

       Les erreurs supplémentaires suivantes peuvent également se produire pour linkat() :

       EBADF  olddirfd ou newdirfd n'est pas un descripteur de fichier valable.

       EINVAL flags contient un drapeau invalide.

       ENOENT AT_EMPTY_PATH est indiqué dans flags mais l'appelant n'a pas la capacité CAP_DAC_READ_SEARCH.

       ENOENT Une tentative de lier vers le fichier /proc/self/fd/NN correspondant à un descripteur  de  fichier
              créé avec

                  open(path, O_TMPFILE | O_EXCL, mode);

              a été réalisée. Consultez open(2).

       ENOTDIR
              oldpath  est  un  chemin  relatif, et olddirfd est un descripteur de fichier ne référençant pas un
              répertoire ; ou bien c'est le cas pour newpath et newdirfd.

       EPERM  AT_EMPTY_PATH a été précisé dans flags, oldpath est une chaîne vide, et olddirfd fait référence  à
              un répertoire.

VERSIONS

       linkat() a été ajouté au noyau Linux dans sa version 2.6.16 ; la glibc le gère depuis la version 2.4.

CONFORMITÉ

       link() : SVr4, BSD 4.3, POSIX.1-2001 (mais consultez la section NOTES), POSIX.1-2008.

       linkat() : POSIX.1-2008.

NOTES

       Les  liens  matériels  créés  par  link(),  ne  peuvent pas s'étendre sur plusieurs systèmes de fichiers.
       Utilisez plutôt symlink(2) si ceci est nécessaire.

       Selon POSIX.1-2001, link() devrait déréférencer oldpath s'il  s'agit  d'un  lien  symbolique.  Cependant,
       depuis  le  noyau  2.0,  Linux  ne  se comporte pas comme cela : si oldpath est un lien symbolique, alors
       newpath est créé comme un lien matériel vers le même fichier de lien symbolique (c'est‐à‐dire que newpath
       devient  un  lien symbolique vers le fichier sur lequel pointe oldpath). Certaines autres implémentations
       ont le même comportement que Linux. POSIX.1-2008 change la spécification de link(), en rendant  dépendant
       de  l'implémentation  le  fait  que  oldpath  est  déréférencé  s'il s'agit d'un lien symbolique. Pour un
       contrôle précis sur le traitement des liens symboliques pour la création d'un lien, consultez linkat(2).

BOGUES

       Sur les systèmes de fichiers NFS, le code de retour peut être faux si le serveur NFS a créé  correctement
       le  lien  mais s'est arrêté avant de donner le code de retour. Utiliser dans ce cas stat(2) pour vérifier
       si le lien a été effectivement créé.

VOIR AUSSI

       ln(1), open(2), rename(2), stat(2), symlink(2), unlink(2), path_resolution(7), symlink(7)

COLOPHON

       Cette page fait partie de la publication 3.65 du projet man-pages Linux. Une description du projet et des
       instructions     pour     signaler     des     anomalies    peuvent    être    trouvées    à    l'adresse
       http://www.kernel.org/doc/man-pages/.

TRADUCTION

       Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a <http://po4a.alioth.debian.org/> par
       l'équipe de traduction francophone au sein du projet perkamon <http://perkamon.alioth.debian.org/>.

       Christophe       Blaess       <http://www.blaess.fr/christophe/>      (1996-2003),      Alain      Portal
       <http://manpagesfr.free.fr/> (2003-2006).  Julien  Cristau  et  l'équipe  francophone  de  traduction  de
       Debian (2006-2009).

       Veuillez  signaler  toute erreur de traduction en écrivant à <debian-l10n-french@lists.debian.org> ou par
       un rapport de bogue sur le paquet manpages-fr.

       Vous pouvez toujours avoir accès à la version anglaise de ce document en utilisant la commande « man -L C
       <section> <page_de_man> ».