man mknod (Appels systèmes) - Créer un noeud du système de fichiers.

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

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

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épertoire.
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éterminé.

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, certains d'entre-eux pouvant affecter mknod.

VOIR AUSSI

TRADUCTION

Christophe Blaess, 1996-2003.