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