mknod, mknodat, mkfifo o mkfifoat, subrutina
Finalidad
Crea un archivo ordinario, primero en primer lugar (FIFO) o un archivo especial.
Biblioteca
Biblioteca C estándar (libc.a)
Sintaxis
#include <sys/stat.h>
int mknodat (int DirFileDescriptor, const char * Path, mode_tMode, dev_tDevice)
int DirFileDescriptor;
char *Path;
int Mode;
dev_t Device; int mkfifo (const char *Path, mode_t Mode)
const char *Path;
int Mode; int mkfifoat (int DirFileDescriptor, const char *Path, mode_tMode)
int DirFileDescriptor;
const char *Path;
int Mode;Descripción
Las subrutinas mknod y mnodat crean un nuevo archivo regular, un archivo especial o un archivo FIFO. La utilización de la subrutina mknod o mnodat para crear tipos de archivo (distintos de FIFO o archivos especiales) requiere autorización de usuario root.
Para que la subrutina mknod o mnodat se complete correctamente, un proceso debe tener permiso de búsqueda y escritura en el directorio padre del parámetro Vía .
Las subrutinas mkfifo y mkfifoat son interfaces con la subrutina mknod , donde el nuevo archivo que se va a crear es un FIFO o un archivo especial. No se necesitan privilegios especiales del sistema.
El nuevo archivo tiene las siguientes características:
- El tipo de archivo se especifica mediante el parámetro Modo .
- El ID de propietario se establece en el ID de usuario efectivo del proceso.
- El ID de grupo del archivo se establece en el ID de grupo del directorio principal si se establece el atributo SetGroupID(S_ISGID) del directorio principal. De lo contrario, el ID de grupo del archivo se establece en el ID de grupo efectivo del proceso de llamada.
- Los bits de permiso y atributo se establecen de acuerdo con el valor del parámetro Modo . Todos los bits establecidos en la máscara de creación de modalidad de archivo del proceso se borran.
Tras la finalización satisfactoria, las marcas de subrutina de mkfifo para actualizar elst_atime,st_ctime, yst_mtimedel archivo. También marca para actualizar elst_ctimeyst_mtimedel directorio que contiene la nueva entrada.
Si el nuevo archivo es un archivo especial de caracteres que tiene el atributo S_IMPX (archivo especial de caracteres multiplexados), cuando se utiliza el archivo, los componentes de nombre de vía de acceso adicionales pueden aparecer después del nombre de vía de acceso como si se tratara de un directorio. La parte adicional del nombre de la vía de acceso está disponible para el controlador de dispositivo del archivo para su interpretación. Esta característica proporciona una interfaz multiplexada al controlador de dispositivo.
La subrutina mknodat es equivalente a la subrutina mknod, y la subrutina mkfifoat es equivalente a la subrutina mkfifo si el parámetro DirFileDescriptor es AT_FDCWD o Path es un nombre de ruta absoluto. Si DirFileDescriptor es un descriptor de archivo válido de un directorio abierto y Path es un nombre de ruta relativo, Path se considera relativo al directorio que está asociado con el parámetro DirFileDescriptor en lugar del directorio de trabajo actual.
Si DirFileDescriptor se abrió sin la bandera de apertura O_SEARCH, la subrutina comprueba si las búsquedas de directorio están permitidas para ese directorio utilizando los permisos actuales del directorio. Si el directorio se ha abierto con el distintivo de apertura O_SEARCH , la subrutina no realiza la comprobación de dicho directorio.
Parámetros
| Elemento | Descripción |
|---|---|
| DirFileDescriptor | Especifica el descriptor de archivo de un directorio abierto. |
| Vía | Nombra el nuevo archivo. Si Network File System (NFS) está instalado en el sistema, esta vía de acceso puede cruzar a otro nodo. Si se especifica DirFileDescriptor y Path es un nombre de ruta relativo, entonces Path se considera relativo al directorio especificado por DirFileDescriptor. |
| Modo | Especifica el tipo de archivo, los atributos y los permisos de acceso. Este parámetro se construye mediante la operación ORing lógica de los valores descritos en el archivo <sys/mode.h> . |
| Dispositivo | Especifica el ID del dispositivo, que corresponde a last_rdevmiembro de la estructura devuelta por la subrutina statx . Este parámetro depende de la configuración y sólo se utiliza si el parámetro Modo especifica un archivo especial de bloque o carácter. Si el archivo que especifica es un archivo remoto, el valor del parámetro Dispositivo debe ser significativo en el nodo donde reside el archivo. |
Valores de retorno
Tras la finalización satisfactoria, se devuelve un valor de 0. En caso contrario, se devuelve un valor de -1 y se establece la variable global errno para indicar el error.
Códigos de error
Las subrutinas mknod y mnodat fallan y el nuevo archivo no se crea si una o más de las siguientes son verdaderas:
| Elemento | Descripción |
|---|---|
| EEXIST | El archivo especificado existe. |
| EDQUOT | El directorio en el que se está colocando la entrada para el nuevo archivo no se puede ampliar, o no se ha podido asignar un i-nodo para el archivo porque la cuota del usuario o del grupo de bloques de disco o i-nodos en el sistema de archivos está agotada. |
| EISDIR | El parámetro Modo especifica un directorio. En su lugar, utilice la subrutina mkdir . |
| ENOSPC | El directorio que contiene el archivo nuevo no se puede ampliar o el sistema de archivos está fuera de los recursos de asignación de archivos. |
| EPERM | El parámetro Modo especifica un tipo de archivo distinto de S_IFIFOy el proceso de llamada no tiene autorización de usuario root. |
| EROFS | El directorio en el que se va a crear el archivo se encuentra en un sistema de archivos de sólo lectura. |
Las subrutinas mnodat y mkfifoat fallan y el nuevo archivo no se crea si una o más de las siguientes son verdaderas:
| Elemento | Descripción |
|---|---|
| EBADF | El parámetro Path no especifica una ruta absoluta y el parámetro DirFileDescriptor no es AT_FDCWD ni un descriptor de archivo válido. |
| ENOTDIR | El parámetro Path no especifica una ruta absoluta y el parámetro DirFileDescriptor no es AT_FDCWD ni un descriptor de archivo asociado a un directorio. |
Las subrutinas mknod, mnodat, mkfifoy mkfifoat no pueden ser satisfactorias por otras razones. Véase " Apéndice. Códigos de error de sistema operativo base para servicios que requieren resolución de nombre de vía de acceso " para una lista de errores adicionales.
Si NFS está instalado en el sistema, las subrutinas también pueden fallar si se cumple lo siguiente:
| Elemento | Descripción |
|---|---|
| ETIMEDOUT | El tiempo de espera de la conexión. |