LINK(2)

NOM
link - Crée un nouveau nom pour un fichier

SYNOPSIS
#include <unistd.h>

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

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

VALEUR RENVOYÉE
Cet appel système renvoie 0 s'il réussit et -1 s'il échoue auquel cas errno est renseignée 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). (Voir aussi path_resolution(7).)

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 bas niveau s'est produite.

ELOOP
    oldpath ou newpath contiennent une référence circulaire (à travers un lien symbolique).

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 ne dispose pas d'assez 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.

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 monté. (Linux permet de monter un système de fichiers en plusieurs endroits, mais link() ne traverse pas les différents points de montage, même si le même système de fichiers est monté sur chacun d'eux.)

CONFORMITÉ
SVr4, BSD 4.3, POSIX.1-2001 (excepté ce qui est noté plus haut).

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. Toutefois, Linux ne le fait pas : si oldpath est un lien symbolique, newpath est créé comme un lien (matériel) vers le même fichier lien symbolique (c'est-à-dire que newpath devient un lien symbolique vers le même fichier auquel oldpath fait référence). Certaines autres implémentations se comportent de la même manière que Linux.

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), linkat(2), open(2), rename(2), stat(2), symlink(2), unlink(2), path_resolution(7), symlink(7)

TRADUCTION

Ce document est une traduction réalisée par Christophe Blaess <http://www.blaess.fr/christophe/> le 10 octobre 1996 et révisée le 2 juillet 2008.

L'équipe de traduction a fait le maximum pour réaliser une adaptation française de qualité. La version anglaise la plus à jour de ce document est toujours consultable via la commande : « LANG=C man 2 link ». N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute erreur dans cette page de manuel.