MKNOD(2) Manuel du programmeur Linux MKNOD(2)
NOM
mknod - Créer un noeud du système de fichiers.
SYNOPSIS
#include
#include
#include
#include
int mknod(const char *pathname, mode_t mode, dev_t dev);
DESCRIPTION
mknod crée un noeud du système de fichiers (fichier, fichier spécial de
périphérique ou tube) appelé pathname, avec les attributs mode et dev.
L'argument mode définit à la fois les permissions d'utilisation, et le
type de noeud à créer. C'est une combinaison par OU binaire ( | ) entre
l'un des types de noeuds ci-dessous et les permissions d'accès pour le
nouveau noeud.
Les permissions sont modifiées par le umask du processus : les permis‐
sions effectivement écrites sont (mode & ~umask).
Le type de noeud doit être l'un des suivants S_IFREG, S_IFCHR, S_IFBLK
S_IFIFO ou S_IFSOCK pour indiquer respectivement un fichier normal
(vide à la création), un fichier spécial mode caractère, un fichier
spécial mode bloc, un tube nommé (FIFO) ou une socket du domaine Unix.
On peut également utiliser 0 pour créer un fichier normal.
Si le noeud est de type S_IFCHR or S_IFBLK alors dev doit spécifier les
numéros majeurs et mineurs du périphérique associé, pour les autres
types de noeuds, dev est ignoré.
Si pathname existe déjà, ou est un lien symbolique, l'appel échoue avec
l'erreur EEXIST.
Le noeud nouvellement créé aura pour propriétaire l'UID effectif du
processus. Si le répertoire contenant ce noeud a son bit Set-GID à 1,
ou si le système de fichier est monté avec une sémantique BSD, le nou‐
veau noeud héritera de l'appartenance au groupe de son parent. Sinon il
appartiendra au groupe effectif du processus.
VALEUR RENVOYÉE
mknod renvoie 0 s'il réussit, ou -1 s'il échoue, auquel cas errno con‐
tient le code d'erreur.
ERREURS
EPERM mode demande la création d'un noeud autre qu'un fichier régulier
une FIFO (tube nommé) ou une socket du domaine Unix, alors que
le processus appelant n'est pas le Super-User. Cette erreur se
produit également si le système de fichier contenant pathname ne
supporte pas les noeuds du type demandé.
EINVAL mode demande la création d'autre chose qu'un fichier normal,
fichier spécial de périphérique, DIFO ou socket.
EEXIST pathname existe déjà
EFAULT pathname pointe en-dehors de l'espace d'adressage accessible.
EACCES Le répertoire parent n'autorise pas l'écriture au processus, ou
l'un des répertoires de pathname n'autorise pas la consultation
de son contenu.
ENAMETOOLONG
pathname trop long.
ENOENT Un répertoire du chemin d'accès pathname n'existe pas ou est un
lien symbolique pointant nulle part.
ENOTDIR
Un élément utilise dans le chemin pathname n'est pas un réper‐
toire.
ENOMEM Pas assez de mémoire pour le noyau.
EROFS pathname serait placé sur un système de fichier en lecture
seule.
ELOOP pathname contient une référence circulaire (à travers un lien
symbolique).
ENOSPC Le périphérique contenant pathname n'a pas assez de place pour
le nouveau noeud.
CONFORMITÉ
SVr4 (mais l'appel y nécessite des privilèges, alors qu'il n'y en a pas
besoin dans POSIX), BSD 4.4. La version Linux diffère de celle de SVr4
en ceci qu'elle n'a pas besoin de privilèges root pour créer des tubes,
et qu'elle ne décrit pas les erreurs EMULTIHOP, ENOLINK, et EINTR.
NOTES
Posix 1003.1-2001 dit : "Le seul usage portable de mknod() est réservé
à la création de fichiers spéciaux FIFO. Si le mode n'est pas S_IFIFO
ou si dev n'est pas 0, alors le comportement de mknod() est indéter‐
miné.
Sous Linux mknod ne peut pas être utilisé pour créer des répertoires.
Il faut créer les répertoires avec mkdir, et les FIFO avec mkfifo.
Il y a de nombreux problèmes avec le protocole sous-jacent à NFS, cer‐
tains d'entre-eux pouvant affecter mknod.
VOIR AUSSI
fcntl(2), mkdir(2), mount(2), socket(2), stat(2), umask(2), unlink(2),
mkfifo(3)
TRADUCTION
Christophe Blaess, 1996-2003.
LDP 30 juillet 2003 MKNOD(2)