Provided by: manpages-es_1.55-10_all bug

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)