Provided by:
manpages-es_1.55-9_all 
NOMBRE
mknod - crea un fichero especial o un fichero regular
SINOPSIS
#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);
DESCRIPCIÓN
mknod intenta crear en el sistema de ficheros un nodo-i (fichero,
fichero especial de dispositivo o tubería nombrada (FIFO)) llamado
pathname, especificado por mode y dev. mode especifica tanto los
permisos de uso como el tipo de nodo-i a crear. Debe ser una
combinación (mediante un O-lógico) de uno de los tipos de ficheros
enumerados a continuación y de los permisos para el nuevo nodo-i. Los
permisos son modificados por la máscara umask en la forma usual: los
permisos del nodo-i creado son (mode & ~umask).
El tipo de fichero debe ser uno de los siguientes: S_IFREG, S_IFCHR,
S_IFBLK y S_IFIFO para especificar un fichero normal (que será creado
vacío), un fichero especial de caracteres, un fichero especial de
bloques o FIFO (tubería con nombre), respectivamente, o cero, lo que
creará un fichero normal.
Si el tipo de fichero es S_IFCHR o S_IFBLK entonces dev especifica los
números mayor y menor del fichero especial de dispositivo creado; en
caso contrario, es ignorado.
Si pathname ya existe, o es un enlace simbólico, esta llamada fallará
devolviendo el error EEXIST.
El identificador efectivo de usuario del proceso indica el propietario
del nuevo nodo-i. Si el directorio que contiene al nodo-i tiene activo
el bit de SETGID (fijar identifcador de grupo) o si el sistema de
ficheros es montado con la semántica de grupos de BSD, el nuevo nodo
heredará la pertenencia al grupo al que pertenezca su directorio padre;
en caso contrario, pertenecerá al grupo indicado por el identificador
efectivo de grupo del proceso.
VALOR DEVUELTO
mknod devuelve cero si ha funcionado correctamente, -1 si ha ocurrido
un error (en cuyo caso se asigna a errno un valor apropiado).
ERRORES
EPERM mode solicita la creación de algo distinto a una tubería con
nombre (FIFO), y el invocador no es el superusuario; este error
también se devuelve si el sistema de ficheros que contiene
pathname no soporta el tipo de nodo-i solicitado.
EINVAL mode solicita la creación de algo diferente a un fichero normal,
un fichero especial de dispositivo o una FIFO.
EEXIST pathname ya existe.
EFAULT pathname apunta fuera de su espacio de direcciones permitido.
EACCES El proceso no tiene permiso de escritura en el directorio padre
o no tiene permiso de búsqueda (ejecución) en uno de los
directorios incluidos en pathname.
ENAMETOOLONG
pathname es demasiado largo.
ENOENT Un directorio componente de pathname no existe o es un enlace
simbólico descolgado.
ENOTDIR
Un componente utilizado como directorio en pathname no es, de
hecho, un directorio.
ENOMEM No hay suficiente memoria disponible en el núcleo.
EROFS pathname indica un fichero en un sistema de ficheros de
sólo-lectura.
ELOOP Se han encontrado demasiados enlaces simbólicos al resolver
pathname.
ENOSPC El dispositivo que contiene pathname no tiene espacio para el
nuevo nodo-i.
CONFORME A
SVr4 (pero la llamada requiere privilegios y por esto no es POSIX),
4.4BSD. La versión Linux difiere de la SVr4 en que no requiere permisos
de superusuario para crear tuberías, y también en que los errores
EMULTIHOP, ENOLINK, o EINTR no están documentados.
OBSERVACIONES
POSIX 1003.1-2001 dice: "El único uso portable de mknod() es para crear
un fichero especial de tipo FIFO. Si mode es distinto de S_IFIFO o dev
es distinto de 0, el comportamiento de mknod() es indefinido."
Bajo Linux, esta llamada no puede usarse para crear ficheros de tipo
directorio o de tipo conector, y no puede ser utilizada por otro
usuario que no sea el superusuario para crear ficheros normales. Para
crear directorios use mkdir, y para crear FIFOs use mkfifo.
Existen numerosas pegas en el protocolo por debajo de NFS. Algunas de
estas afectan a mknod.
VÉASE TAMBIÉN
close(2), fcntl(2), mkdir(2), mount(2), open(2), read(2), socket(2),
stat(2), umask(2), unlink(2), write(2), fopen(3), mkfifo(3)