NOM
mknod - Créer un noeud du système de fichiers
SYNOPSIS
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
int mknod(const char *pathname, mode_t mode, dev_t dev);
Exigences de macros de test de fonctionnalités pour la glibc (voir
feature_test_macros(7)) :
mknod() : _BSD_SOURCE || _SVID_SOURCE || _XOPEN_SOURCE >= 500
mknod() crée un noeud du système de fichiers (fichier, fichier spécial
de périphérique ou tube nommé) 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
permissions 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 régulier
(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.
Un type de fichier égal à 0 est équivalent à S_IFREG.
Si le noeud est de type S_IFCHR or S_IFBLK alors dev doit indiquer les
numéros majeurs et mineurs du périphérique associé (makedev(3) peut
être utile pour construire la valeur de dev). 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 fichiers est monté avec une sémantique BSD, le
nouveau 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
contient le code d’erreur.
ERREURS
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. (Voir aussi path_resolution(7).)
EEXIST pathname existe déjà. Cela inclut le cas où pathname est un lien
symbolique, pouvant pointer nulle part.
EFAULT pathname pointe en‐dehors de l’espace d’adressage accessible.
EINVAL mode demande la création d’autre chose qu’un fichier régulier,
fichier spécial de périphérique, FIFO ou socket.
ELOOP Trop de liens symboliques ont été rencontrés en parcourant
pathname.
ENAMETOOLONG
pathname est trop long.
ENOENT Un des répertoires du chemin d’accès pathname 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 pathname n’a pas assez de place pour
le nouveau noeud.
ENOTDIR
Un élément du chemin d’accès pathname n’est pas un répertoire.
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 privilégié (sous
Linux : n’a pas la capacité CAP_MKNOD). Cette erreur se produit
également si le système de fichiers contenant pathname ne
supporte pas les noeuds du type demandé.
EROFS pathname est placé sur un système de fichiers en lecture seule.
CONFORMITÉ
SVr4, BSD 4.4, POSIX.1-2001 (mais voir plus loin).
NOTES
POSIX.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éterminé».
Toutefois, aujourd’hui, on ne devrait jamais utiliser mknod() pour
cela ; on devrait utiliser mkfifo(3), une fonction spécialement conçue
pour cela.
Sous Linux mknod ne peut pas être utilisé pour créer des répertoires.
Il faut créer les répertoires avec mkdir(2).
Il y a de nombreux problèmes avec le protocole sous‐jacent à NFS,
certains d’entre eux pouvant affecter mknod().
VOIR AUSSI
chmod(2), chown(2), fcntl(2), mkdir(2), mknodat(2), mount(2),
socket(2), stat(2), umask(2), unlink(2), makedev(3), mkfifo(3),
path_resolution(7)
COLOPHON
Cette page fait partie de la publication 3.23 du projet man-pages
Linux. Une description du projet et des instructions pour signaler des
anomalies peuvent être trouvées à l’adresse
http://www.kernel.org/doc/man-pages/.
TRADUCTION
Cette page de manuel a été traduite et mise à jour par Christophe
Blaess <http://www.blaess.fr/christophe/> entre 1996 et 2003, puis par
Alain Portal <aportal AT univ-montp2 DOT fr> jusqu’en 2006, et mise à
disposition sur http://manpagesfr.free.fr/.
Les mises à jour et corrections de la version présente dans Debian sont
directement gérées par Julien Cristau <jcristau@debian.org> et l’équipe
francophone de traduction de Debian.
Veuillez signaler toute erreur de traduction en écrivant à
<debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
paquet manpages-fr.
Vous pouvez toujours avoir accès à la version anglaise de ce document
en utilisant la commande « man -L C <section> <page_de_man> ».