MKNOD(2) | Manual del Programador de Linux | MKNOD(2) |
mknod - crea un fichero especial o un fichero regular
#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);
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.
mknod devuelve cero si ha funcionado correctamente, -1 si ha ocurrido un error (en cuyo caso se asigna a errno un valor apropiado).
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.
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.
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)
29 Marzo 1994 | Linux 1.0 |