jammy (2) linkat.2.gz

Provided by: manpages-fr-dev_4.13-4_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 (consulter feature_test_macros(7)) :

       linkat() :
           Depuis la glibc 2.10 :
               _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() pour un chemin relatif).

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

       En cas de succès, zéro est renvoyé. En cas d'erreur, -1 est renvoyé et errno reçoit une valeur adéquate.

ERREURS

       EACCES L'écriture  dans  le  répertoire contenant newpath n'est pas autorisée, ou l'un des répertoires ne
              permet pas le parcours (exécution) 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 oldpath ou newpath.

       EMLINK Le fichier auquel renvoie oldpath a déjà atteint le nombre maximal 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/protected_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 fichiers. (Linux permet de monter un
              système de fichiers à différents endroits, mais link() ne fonctionne à travers  différents  points
              de montage, même si le même système de fichiers y est monté.

       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 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 correspondant à 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 relatif et newdirfd fait référence à un répertoire qui a été supprimé.

       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, 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  plusieurs  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 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  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 chemins
       relatifs, la glibc construit des chemins à partir des liens symboliques dans /proc/self/fd  correspondant
       aux paramètres olddirfd et newdirfd.

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 5.10 du projet man-pages Linux. Une description du projet et des
       instructions pour signaler des anomalies et la dernière version de cette page  peuvent  être  trouvées  à
       l'adresse https://www.kernel.org/doc/man-pages/.

TRADUCTION

       La   traduction   française   de   cette   page   de   manuel   a   été   créée   par  Christophe  Blaess
       <https://www.blaess.fr/christophe/>,   Stéphan   Rafin   <stephan.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.coulon@wanadoo.fr>,   Julien   Cristau
       <jcristau@debian.org>,      Thomas      Huriaux      <thomas.huriaux@gmail.com>,     Nicolas     François
       <nicolas.francois@centraliens.net>,    Florentin    Duneau    <fduneau@gmail.com>,     Simon     Paillard
       <simon.paillard@resel.enst-bretagne.fr>,     Denis    Barbier    <barbier@debian.org>,    David    Prévot
       <david@tilapin.org>,    Frédéric    Hantrais    <fhantrais@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 ⟨⟩.