mknod

MKNOD(2)                  Manuel du programmeur Linux                 MKNOD(2)



NOM
       mknod, mknodat - Créer un fichier (special ou ordinaire)

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);

       #include <fcntl.h>           /* Définition des constantes  AT_* */
       #include <sys/stat.h>

       int mknodat(int dirfd, const char *pathname, mode_t  mode,dev_t dev) ;

   Exigences de macros de test de fonctionnalités pour la glibc (consultez
   feature_test_macros(7)) :

       mknod() :
           _BSD_SOURCE || _SVID_SOURCE || _XOPEN_SOURCE >= 500 ||
           _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED

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

   mknodat()
       L'appel système mknodat() agit exactement de la même façon que
       l'appel mknod(2), aux différences suivantes près.

       Si le chemin donné dans pathname est relatif, il est interprété par
       rapport au répertoire référencé par le descripteur de fichier
       dirfd, plutôt que par rapport au répertoire courant, comme dans
       mknod(2).

       Si pathname est un chemin relatif, et si dirfd est la valeur spéciale
       AT_FDCWD, pathname est interprété comme étant relatif au répertoire
       courant du processus appelant, comme mknod(2).

       Si pathname est un chemin absolu, dirfd est ignoré.

       Consultez openat(2) pour une explication de la nécessité de
       mknodat().

VALEUR RENVOYÃE
       mknod() et mknodat() renvoient 0 si ils réussissent, ou -1 s'ils
       échouent, 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. (Consultez aussi
              path_resolution(7).)

       EDQUOT Le quota utilisateur pour le système de fichiers a été
              dépassé (usage de blocs de disque ou d'inÅuds).

       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 nÅud.

       ENOTDIR
              Un élément du chemin d'accès 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 est placé sur un système de fichiers en lecture
              seule.

       Les erreurs supplémentaires suivantes peuvent survenir pour
       mknodat() :

       EBADF  dirfd n'est pas un descripteur de fichier valable.

       ENOTDIR
              pathname est relatif, et le descripteur de fichier dirfd est
              associé à un fichier, pas à un répertoire.

VERSIONS
       mknodat() a été ajouté au noyau Linux dans sa version 2.6.16 ; la
       glibc le gère depuis la version 2.4.

CONFORMITÃ
       mknod() : SVr4, BSD 4.4, POSIX.1-2001 (mais voir plus loin),
       POSIX.1-2008.

       mknodat() : POSIX.1-2008.

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() et mknodat(2).

VOIR AUSSI
       chmod(2), chown(2), fcntl(2), mkdir(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.70 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
       Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a
       <http://po4a.alioth.debian.org/> par l'équipe de traduction
       francophone au sein du projet perkamon
       <http://perkamon.alioth.debian.org/>.

       Christophe Blaess <http://www.blaess.fr/christophe/> (1996-2003), Alain
       Portal <http://manpagesfr.free.fr/> (2003-2006).  Julien Cristau et
       l'équipe francophone de traduction de Debian (2006-2009).

       Veuillez signaler toute erreur de traduction en écrivant Ã
       <perkamon-fr@traduc.org>.

       Vous pouvez toujours avoir accès à la version anglaise de ce document
       en utilisant la commande « LC_ALL=C man <section> <page_de_man> ».



Linux                          21 février 2014                       MKNOD(2)