Man page - linkat(2)

Packages contains this manual

Available languages:

en fr pl nl ja ru de

Manual

link

NOM
BIBLIOTHÈQUE
SYNOPSIS
DESCRIPTION
linkat()
VALEUR RENVOYÉE
ERREURS
VERSIONS
glibc
STANDARDS
HISTORIQUE
NOTES
BOGUES
VOIR AUSSI
TRADUCTION

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 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 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 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 FS_IOC_SETFLAGS (2const).)

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

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 ().

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 .

STANDARDS

link ()

POSIX.1-2008.

HISTORIQUE

link ()

SVr4, 4.3BSD, POSIX.1-2001 (mais voir VERSIONS).

linkat ()

POSIX.1-2008. Linux 2.6.16, glibc 2.4.

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.

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)

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