MKNOD(2)

NOM
mknod - Creer un noeud du systeme de fichier.

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

DESCRIPTION
mknod cree un noeud du systeme de fichiers (fichier, fichier special de peripherique ou tube) appele pathname, avec les attributs mode et dev. mode definit a la fois les permissions d'utilisation, et le type de noeud a creer. C'est une combinaison par OU binaire ( | ) entre l'un des types de noeuds ci-dessous et les permissions d'acces pour le nouveau noeud. Les permissions sont modifiees par le umask du processus : les permissions effectivement ecrites sont (mode & ~umask). Le type de noeud doit etre l'un des suivants S_IFREG, S_IFCHR, S_IFBLK et S_IFIFO pour indiquer respectivement un fichier normal (vide a la creation), un fichier special mode caractere, un fichier special mode bloc, ou un tube nomme (FIFO). On peut egalement utiliser 0 pour creer un fichier normal. Si le noeud est de type S_IFCHR or S_IFBLK alors dev doit specifier les numeros majeurs et mineurs du peripherique associe, pour les autres types de noeuds, dev est ignore. Le noeud nouvellement cree aura pour proprietaire l'UID effectif du processus. Si le repertoire contenant ce noeud a son bit Set-GID a 1, ou si le systeme de fichier est monte avec une semantique BSD, le nouveau noeud heritera de l'appartenance au groupe de son parent. Sinon il appartiendra au groupe effectif du processus.

VALEUR RENVOYEE
mknod renvoie 0 s'il reussit, ou -1 s'il echoue, auquel cas errno contient le code d'erreur.

ERREURS

EPERM
    mode demande la creation d'un noeud autre qu'un tube nomme, alors que le processus appelant n'est pas le Super-User. Cette erreur se produit egalement si le systeme de fichier contenant pathname ne supporte pas les noeuds du type demande.

EINVAL
    mode demande la creation d'autre chose qu'un fichier normal, fichier special de peripherique ou tube nomme.

EEXIST
    pathname existe deja

EFAULT
    pathname pointe en-dehors de l'espace d'adressage accessible.

EACCES
    Le repertoire parent n'autorise pas l'ecriture au processus, ou l'un des repertoires de pathname n'autorise pas la consultation de son contenu.

ENAMETOOLONG
    pathname trop long.

ENOENT
    Un repertoire du chemin d'acces pathname n'existe pas ou est un lien symbolique pointant nulle part.

ENOTDIR
    Un element utilise dans le chemin pathname n'est pas un repertoire.

ENOMEM
    Pas assez de memoire pour le noyau.

EROFS
    pathname correspond a un fichier sur un systeme de fichier en lecture seule.

ELOOP
    pathname contient une reference circulaire (a travers un lien symbolique).

ENOSPC
    Le peripherique contenant pathname n'a pas assez de place pour le nouveau noeud. Cette erreur se produit egalement si le quota de disque de l'utilisateur est depasse.

CONFORMITE
SVr4 (mais l'appel y necessite des privileges, alors qu'il n'y en a pas besoin dans POSIX), BSD 4.4. La version Linux differe de celle de SVr4 en ceci qu'elle n'a pas besoin de privileges root pour creer des tubes, et qu'elle ne decrit pas les erreurs EMULTIHOP, ENOLINK, et EINTR.

BUGS
mknod ne peut pas etre utilise pour creer des repertoires ou des sockets, et ne peut etre appele que par le Super-User pour creer des fichiers normaux.

Il y a de nombreux problemes avec le protocole sous-jacent a NFS, certains d'entre-eux pouvant affecter mknod.

VOIR AUSSI
read(2), write(2), fcntl(2), close(2), unlink(2), open(2), mkdir(2), stat(2), umask(2), mount(2), socket(2), fopen(3).