dwww Home | Manual pages | Find package

link(2)                       System Calls Manual                      link(2)

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

BIBLIOTHÈQUE
       Bibliothèque C standard (libc, -lc)

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 (consulter
   feature_test_macros(7)) :

       linkat() :
           Depuis la version 2.10 de la glibc :
               _POSIX_C_SOURCE >= 200809L
           Avant la version 2.10 de la glibc :
               _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étermi-
       ner 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 rap-
       port 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() pour un chemin relatif).

       Si oldpath est relatif et olddirfd a la valeur spéciale AT_FDCWD,  old-
       path est interprété relativement au répertoire courant du processus ap-
       pelant, (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 corres-
       pondant à newdirfd.

       Les valeurs suivantes peuvent être combinées avec un opérateur OU bit à
       bit 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  l'attribut  O_PATH).  Dans  ce cas, olddirfd peut
              faire référence à n'importe quel type de fichier  à  l’exception
              d’un  répertoire. Cette opération ne fonctionne généralement pas
              si le nombre de liens du fichier est égal à zéro  (les  fichiers
              créés  par  O_TMPFILE  sans  O_EXCL  constituent une exception).
              L'appelant doit disposer de la capacité CAP_DAC_READ_SEARCH pour
              pouvoir  utiliser cet attribut. Cet attribut est propre à Linux,
              et _GNU_SOURCE doit être initialisé 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. Si procfs est monté, cet
              attribut offre une alternative à AT_EMPTY_PATH si  on  l'utilise
              de la façon suivante :

                  linkat(AT_FDCWD, "/proc/self/fd/<fd>", newdirfd,
                         newname, AT_SYMLINK_FOLLOW);

       Avant Linux 2.6.18, l'argument flags n'était pas utilisé et devait être
       0.

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

VALEUR RENVOYÉE
       En cas de succès, zéro est renvoyé. En cas d'erreur, -1 est renvoyé  et
       errno est définie pour préciser l'erreur.

ERREURS
       EACCES L'écriture  dans le répertoire contenant newpath n'est pas auto-
              risée, ou l'un des répertoires ne permet pas le parcours (exécu-
              tion)  dans  le  chemin d’accès de oldpath ou newpath. 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  old-
              path ou newpath.

       EMLINK Le fichier auquel renvoie oldpath a déjà atteint le nombre maxi-
              mal de liens vers lui. Par exemple, sur un système  de  fichiers
              ext4(5) qui n'utilise pas la fonctionnalité dir_index, la limite
              du nombre de liens matériels vers un fichier est de 65 000 ; sur
              btrfs(5), la limite est de 65 535.

       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 La mémoire disponible du noyau n'était pas suffisante.

       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  utilisé  comme  répertoire  dans 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 pour créer un lien matériel vers ce
              fichier  (consultez  la  description   de   /proc/sys/fs/protec-
              ted_hardlinks dans proc(5)).

       EPERM  oldpath est marqué comme immuable ou seulement complétable (voir
              ioctl_iflags(2)).

       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 fi-
              chiers. (Linux permet de monter un système de fichiers à  diffé-
              rents  endroits,  mais link() ne fonctionne pas à travers diffé-
              rents points de montage, même si le même système de fichiers est
              monté sur les deux.

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

       EBADF  oldpath (newpath) est relatif, mais olddirfd (newdirfd) n'est ni
              AT_FDCWD ni un descripteur de fichier valable.

       EINVAL flags contient un drapeau non valable.

       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  corres-
              pondant à un descripteur de fichier créé avec

                  open(path, O_TMPFILE | O_EXCL, mode);

              Consultez open(2).

       ENOENT Il y a eu une tentative de lien vers le fichier /proc/self/fd/NN
              correspondant à un fichier qui a été effacé.

       ENOENT oldpath est un chemin relatif et olddirfd fait  référence  à  un
              répertoire qui a été supprimé, ou bien newpath est un chemin re-
              latif et newdirfd fait référence à un répertoire qui a été  sup-
              primé.

       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é à Linux 2.6.16 ; la prise en charge de la biblio-
       thèque ajoutée dans la glibc 2.4.

STANDARDS
       link() :  SVr4, 4.3BSD, 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 plu-
       sieurs systèmes de fichiers. Utilisez plutôt symlink(2) si cela est né-
       cessaire.

       Selon POSIX.1-2001, link() devrait  déréférencer  oldpath  s'il  s'agit
       d'un lien symbolique. Cependant, depuis Linux 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
       soit déréférencé s'il s'agit d'un lien  symbolique.  Pour  un  contrôle
       précis sur le traitement des liens symboliques lors de la création d'un
       lien, utilisez linkat().

   Notes de la glibc
       Sur les anciens noyaux où linkat() n'est pas  disponible,  la  fonction
       enveloppe  de  la  glibc  se rabat sur l'utilisation de link(), sauf si
       AT_SYMLINK_FOLLOW est indiqué. Quand oldpath et newpath sont  des  che-
       mins relatifs, la glibc construit des chemins à partir des liens symbo-
       liques dans /proc/self/fd correspondant aux paramètres olddirfd et new-
       dirfd.

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_resolu-
       tion(7), symlink(7)

TRADUCTION
       La  traduction française de cette page de manuel a été créée par Chris-
       tophe Blaess <https://www.blaess.fr/christophe/>, Stéphan  Rafin  <ste-
       phan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, Fran-
       çois Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe  Gué-
       rard  <fevrier@tigreraye.org>,  Jean-Luc  Coulon (f5ibh) <jean-luc.cou-
       lon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>,  Thomas  Huriaux
       <thomas.huriaux@gmail.com>,  Nicolas François <nicolas.francois@centra-
       liens.net>, Florentin Duneau <fduneau@gmail.com>, Simon  Paillard  <si-
       mon.paillard@resel.enst-bretagne.fr>,    Denis   Barbier   <barbier@de-
       bian.org>, David Prévot <david@tilapin.org>, Frédéric  Hantrais  <fhan-
       trais@gmail.com> et Jean-Philippe MENGUAL <jpmengual@debian.org>

       Cette traduction est une documentation libre ; veuillez vous reporter à
       la       GNU       General       Public        License        version 3
       ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩  concernant  les conditions
       de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.

       Si vous découvrez un bogue dans la traduction de cette page de  manuel,
       veuillez envoyer un message à ⟨debian-l10n-french@lists.debian.org⟩.

Pages du manuel de Linux 6.03   5 février 2023                         link(2)

Generated by dwww version 1.15 on Sat Jun 29 01:41:07 CEST 2024.