mknod

MKNOD(2)                Manual del Programador de Linux               MKNOD(2)



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)



Linux 1.0                        29 Marzo 1994                        MKNOD(2)