MKNOD
Section : Manuel du programmeur Linux (
2)
Mise à jour de la version anglaise : 26 juillet 2007
Index
Menu principal
NOM
mknod - Créer un nœud 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
DESCRIPTION
mknod()
crée un nœud 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 nœud à créer.
C'est une combinaison par
OU binaire
« | »
entre l'un des types de nœuds ci-dessous et les permissions d'accès
pour le nouveau nœud.
Les permissions sont modifiées par le
umask
du processus : les permissions effectivement écrites sont
(mode & ~umask).
Le type de nœud 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 nœud est de type
S_IFCHR
ou
S_IFBLK,
alors
dev
doit indiquer les numéros majeurs et mineurs du périphérique
associé. Pour les autres types de nœuds,
dev
est ignoré.
Si
pathname
existe déjà, ou est un lien symbolique, l'appel échoue avec l'erreur
EEXIST.
Le nœud nouvellement créé aura pour propriétaire l'UID effectif
du processus.
Si le répertoire contenant ce nœud a son bit Set-GID à 1,
ou si le système de fichiers est monté avec une sémantique BSD,
le nouveau nœud 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, pendouillant (« dangling ») ou non.
- 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
-
pathname
contient une référence circulaire (à travers un lien symbolique).
- ENAMETOOLONG
-
pathname
est trop long.
- ENOENT
-
Un répertoire 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 nœud.
- ENOTDIR
-
Un élément utilise dans le chemin
pathname
n'est pas un répertoire.
- EPERM
-
mode
demande la création d'un nœud 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 nœuds du type demandé.
- EROFS
-
pathname
serait 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),
mkfifo(3),
path_resolution(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 mknod ».
N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute
erreur dans cette page de manuel.
Index
- NOM
-
- SYNOPSIS
-
- DESCRIPTION
-
- VALEUR RENVOYÉE
-
- ERREURS
-
- CONFORMITÉ
-
- NOTES
-
- VOIR AUSSI
-
- TRADUCTION
-
Dernière mise à jour : 2 juillet 2008