MKNOD(2)

NOMBRE
mknod - crea un directorio

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

DESCRIPCION
mknod intenta crear un nodo-i en el sitema de ficheros (fichero, dispositivo o tuberia ) llamado pathname, especificado por mode y dev. mode especifica los permisos de uso y tipo de nodo-i a crear. Debe ser una combinacion (utilizando mascaras de bits OR) de uno de los tipo de ficheros enumerados a continaucion y de los permisos para el nuevo nodo-i. Los permisos son modificados por por la mascara 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 sera creado vacio), un fichero de tipo caracter, de bloques o FIFO (tuberia con nombre), respectivamente, o cero, que creara un fichero normal. Si el tipo de fichero es S_IFCHR o S_IFBLK entonces dev espeficia los valores mayor y menor de fichero de dispositivo creado; de otra forma es ignorado. El identificador de usuario efectivo indica el propietario del nuevo nodo-i. Si el directorio que contiene al nodo-i tiene fijado el bit de identificador de grupo, o si el sistema de ficheros es montado con la semantica de grupos de BSD, el nuevo nodo heredara el propietario del grupo de su directorio padre; en otro caso sera poseido por el grupo efectivo que marque el identificador del proceso.

VALOR DEVUELTO
mknod devuelve cero si ha funconado correctamente, -1 si ha ocurrido un error (en cuyo caso errno es modificado apropiadamente).

ERRORES

EPERM
    mode solicitada la creacion de algo distivo a una tuberia con nombre (FIFO), y el invocador no es el super-usuario (administrador); devuelvo tambien si el sistema de ficheros indicado en pathname no soporta el tipo de nodo-i solicitado.

EINVAL
    mode solicitada la creacion de algo diferente a un fichero normal, un fichero de dispositivo o de tipo FIFO.

EEXIST
    pathname ya existe.

EFAULT
    pathname apunta fuera de su espacio de direcciones permitido.

EACCES
    El directorio padre no permite la escritura al proceso, o a uno de los directorios incluido en pathname no permite la busqueda (ejecucion).

ENAMETOOLONG
    pathname es demasiado largo.

ENOENT
    Un componente de pathname no existe o es un enlace simbolico.

ENOTDIR
    El comoponente utilizado como directorio en pathname no es, de hecho, un directorio.

ENOMEM
    Memoria del nucleo disponible insuficiente.

EROFS
    pathname indica un fichero en un sistema de ficheros de solo lectura.

ELOOP
    pathname contiene una referencia circular a un enlace simbolico, esto es, un enlace simbólico que contiene una referencia a si mismo.

ENOSPC
    El dispositivo que contiene pathname no tiene espacio para el nuevo nodo-i.

COMPATIBLE CON
SVr4 (pero la llamada requiere privilegios y por esto no es POSIX), 4.4BSD. La version Linux difiere de la SVr4 en que no queriere permisos de administrador para crear tuberias, tambien en que los errores EMULTIHOP, ENOLINK, o EINTR no estan documentados.

FALLOS
La llamada mknod no puede ser utilizada para crear directorios o ficheros de comunicaciones (sockets), y no puede ser utilizada para crear ficheros normales por otros usuarios distintos del administrador. Existen numerosas pegas en el protocolo por debajo de NFS. Algunas de estas afectan a mknod.

VER TAMBIÉN
read(2), write(2), fcntl(2), close(2), unlink(2), open(2), mkdir(2), stat(2), umask(2), mount(2), socket(2), fopen(3).