Skip to main content

Open Linux Command y Unix Command

Aprenda Linux - Hora de aprender comandos básicos (Junio 2026)

Aprenda Linux - Hora de aprender comandos básicos (Junio 2026)
Anonim

Sinopsis

#incluir #incluir #incluir int abierto (const char * nombre de ruta , En t banderas ); int abierto (const char * nombre de ruta , En t banderas , mode_t modo ); int creat (const char * nombre de ruta , mode_t modo );

Descripción

losabierto() El comando system linux se usa para convertir una ruta de acceso en un descriptor de archivo (un entero pequeño, no negativo, para usar en I / O subsiguiente como con leer, escribir, etc.). Cuando la llamada es exitosa, el descriptor de archivo devuelto será el descriptor de archivo más bajo que no está abierto actualmente para el proceso. Esta llamada crea un nuevo archivo abierto, no compartido con ningún otro proceso. (Pero los archivos abiertos compartidos pueden surgir a través detenedor(2) llamada al sistema.) El nuevo descriptor de archivo está configurado para permanecer abierto a través de las funciones exec (verfcntl(2)). El desplazamiento del archivo se establece al principio del archivo.

El parámetro banderas es uno deO_RDONLY, O_WRONLY oO_RDWR que solicitan abrir el archivo de solo lectura, solo escritura o lectura / escritura, respectivamente, a nivel de bits - o 'D con cero o más de los siguientes:

O_CREAT

Si el archivo no existe se creará. El propietario (ID de usuario) del archivo se establece en la ID de usuario efectiva del proceso. La propiedad del grupo (ID de grupo) se establece en el ID de grupo efectivo del proceso o en el ID de grupo del directorio principal (según el tipo de sistema de archivos y las opciones de montaje, y el modo del directorio principal, consulte, por ejemplo, el montaje opciones bsdgroups y sysvgroups del sistema de archivos ext2, como se describe enmontar(8)).

O_EXCL

Cuando se utiliza conO_CREAT, si el archivo ya existe es un error y elabierto fallará. En este contexto, existe un enlace simbólico, independientemente de hacia dónde apunta.O_EXCL está roto en los sistemas de archivos NFS, los programas que dependen de él para realizar tareas de bloqueo contendrán una condición de carrera. La solución para realizar el bloqueo de archivos atómicos usando un archivo de bloqueo es crear un archivo único en la misma fs (por ejemplo, incorporando nombre de host y pid), use el enlace (2) para crear un enlace al archivo de bloqueo. Sienlazar() devuelve 0, el bloqueo es exitoso. De lo contrario, utilice estado(2) en el archivo único para verificar si su recuento de enlaces ha aumentado a 2, en cuyo caso el bloqueo también es exitoso.

O_NOCTTY

Si nombre de ruta se refiere a un dispositivo terminal --- vertty(4) --- no se convertirá en el terminal de control del proceso incluso si el proceso no tiene uno.

O_TRUNC

Si el archivo ya existe y es un archivo normal y el modo abierto permite la escritura (es decir, es O_RDWR u O_WRONLY) se truncará a la longitud 0. Si el archivo es un archivo de dispositivo de FIFO o terminal, se ignora el indicador O_TRUNC. De lo contrario, el efecto de O_TRUNC no se especifica. (En muchas versiones de Linux se ignorará; en otras versiones, devolverá un error).

O_APPEND

El archivo se abre en modo agregado. Antes de cadaescribir, el puntero del archivo se coloca al final del archivo, como si conlseek. O_APPEND puede llevar a archivos dañados en los sistemas de archivos NFS si más de un proceso agrega datos a un archivo a la vez. Esto se debe a que NFS no admite la adición a un archivo, por lo que el núcleo del cliente debe simularlo, lo que no se puede hacer sin una condición de carrera.

O_NONBLOCK oCON RETRASO

Cuando sea posible, el archivo se abre en modo no bloqueante. Ni elabierto ni ninguna operación posterior en el descriptor de archivo que se devuelve hará que el proceso de llamada espere. Para el manejo de FIFOs (tuberías con nombre), ver tambiénfifo(4). Este modo no necesita tener ningún efecto en archivos que no sean FIFO.

O_SYNC

El archivo se abre para la E / S síncrona. Algunaescribirs en el descriptor de archivo resultante bloqueará el proceso de llamada hasta que los datos se hayan escrito físicamente en el hardware subyacente. Ver las RESTRICCIONES a continuación, sin embargo.

O_NOFOLLOW

Si nombre de ruta Es un enlace simbólico, entonces la apertura falla. Esta es una extensión de FreeBSD, que se agregó a Linux en la versión 2.1.126. Los enlaces simbólicos en los componentes anteriores de la ruta se seguirán. Los encabezados de glibc 2.0.100 y posteriores incluyen una definición de esta bandera; los núcleos anteriores a 2.1.126 lo ignorarán si se usan .

O_directorio

Si nombre de ruta no es un directorio, causa que la apertura falle. Esta bandera es específica de Linux, y se agregó en la versión del kernel 2.1.126, para evitar problemas de denegación de servicio siopendir(3) se llama en un dispositivo FIFO o en cinta, pero no debe utilizarse fuera de la implementación deopendir.

O_DIRECTO

Intente minimizar los efectos de caché de la E / S hacia y desde este archivo. En general, esto degradará el rendimiento, pero es útil en situaciones especiales, como cuando las aplicaciones hacen su propio almacenamiento en caché. El archivo de E / S se realiza directamente a / desde los buffers de espacio del usuario. La E / S es síncrona, es decir, al finalizar el leer(2) oescribir(2) llamada al sistema, se garantiza que los datos han sido transferidos. Los tamaños de transferencia y la alineación del búfer del usuario y la compensación del archivo deben ser múltiplos del tamaño de bloque lógico del sistema de archivos.Este indicador es compatible con varios sistemas similares a Unix; El soporte fue agregado bajo Linux en el kernel versión 2.4.10.Una interfaz semánticamente similar para dispositivos de bloque se describe encrudo(8).

O_ASYNC

Generar una señal (SIGIO por defecto, pero esto se puede cambiar a través defcntl(2)) cuando la entrada o salida sea posible en este descriptor de archivo. Esta función solo está disponible para terminales, pseudo-terminales y enchufes. Verfcntl(2) para más detalles.

O_LARGEFILE

En los sistemas de 32 bits que admiten el sistema de archivos grandes, permite abrir archivos cuyos tamaños no pueden representarse en 31 bits.

Algunas de estas banderas opcionales pueden ser alteradas usandofcntl después de que el archivo ha sido abierto.

El argumento modo Especifica los permisos a usar en caso de que se cree un nuevo archivo. Es modificado por el proceso.umask de la forma habitual: los permisos del archivo creado son(modo y ~ umask). Tenga en cuenta que este modo solo se aplica a futuros accesos del archivo recién creado; laabiertola llamada que crea un archivo de solo lectura puede devolver un descriptor de archivo de lectura / escritura.

Se proporcionan las siguientes constantes simbólicas modo :

S_IRWXU

El usuario 00700 (propietario del archivo) tiene permiso de lectura, escritura y ejecución

S_IRUSR (S_IREAD)

00400 usuario tiene permiso de lectura

S_IWUSR (S_IWRITE)

00200 usuario tiene permiso de escritura

S_IXUSR (S_IEXEC)

00100 usuario tiene permiso de ejecución

S_IRWXG

El grupo 00070 tiene permiso de lectura, escritura y ejecución.

S_IRGRP

00040 grupo tiene permiso de lectura

S_IWGRP

00020 grupo tiene permiso de escritura

S_IXGRP

El grupo 00010 tiene permiso de ejecución

S_IRWXO

00007 otros tienen permiso de lectura, escritura y ejecución.

S_IROTH

00004 más personas tienen permiso de lectura

S_IWOTH

00002 otros tienen permiso de escritura

S_IXOTH

00001 otros tienen permiso de ejecución

modo debe especificarse cuandoO_CREAT está en el banderas , y se ignora de lo contrario.

creat es equivalente aabierto con banderas igual aO_CREAT | O_WRONLY | O_TRUNC.

VALOR DEVUELTO

abierto ycreat devuelva el nuevo descriptor de archivo, o -1 si se produjo un error (en cuyo caso, errno se establece adecuadamente). Tenga en cuenta queabierto Puede abrir archivos especiales del dispositivo, perocreat no se pueden crear - usarmknod(2) en su lugar.

En sistemas de archivos NFS con mapeo UID habilitado,abierto puede devolver un descriptor de archivo pero, por ejemplo, leer(2) las solicitudes son denegadas conEACCES. Esto se debe a que el cliente realizaabierto al verificar los permisos, pero el servidor realiza la asignación de UID en las solicitudes de lectura y escritura.

Si el archivo se creó nuevamente, sus campos atime, ctime, mtime se configuran en la hora actual, y también lo son los campos ctime y mtime del directorio principal. De lo contrario, si el archivo se modifica debido al indicador O_TRUNC, sus campos ctime y mtime se configuran en la hora actual.

Los errores

EEXIST

nombre de ruta ya existe yO_CREAT yO_EXCL fueron usados.

EISDIR

nombre de ruta se refiere a un directorio y al acceso solicitado escrito involucrado (es decir,O_WRONLY oO_RDWR Está establecido).

EACCES

El acceso solicitado al archivo no está permitido, o uno de los directorios en nombre de ruta no permitió el permiso de búsqueda (ejecución), o el archivo aún no existía y el acceso de escritura al directorio principal no está permitido.

ENAMETOOLONG

nombre de ruta era demasiado largo

ENOENT

O_CREAT no está establecido y el archivo nombrado no existe. O bien, un componente de directorio en nombre de ruta No existe o es un enlace simbólico colgante.

ENOTDIR

Un componente utilizado como directorio en nombre de ruta no es, de hecho, un directorio, oO_directoriofue especificado y nombre de ruta no era un directorio

ENXIO

O_NONBLOCK | O_WRONLY está establecido, el archivo nombrado es un FIFO y ningún proceso tiene el archivo abierto para su lectura. O bien, el archivo es un archivo especial de dispositivo y no existe ningún dispositivo correspondiente.

ENODEV

nombre de ruta se refiere a un archivo especial de dispositivo y no existe ningún dispositivo correspondiente. (Este es un error del kernel de Linux: en esta situación, se debe devolver ENXIO).

EROFS

nombre de ruta hace referencia a un archivo en un sistema de archivos de solo lectura y se solicitó acceso de escritura.

ETXTBSY

nombre de ruta se refiere a una imagen ejecutable que se está ejecutando actualmente y se solicitó acceso de escritura.

EFAULT

nombre de ruta puntos fuera de su espacio de direcciones accesibles.

ELOOP

Se encontraron demasiados enlaces simbólicos al resolver nombre de ruta oO_NOFOLLOW fue especificado pero nombre de ruta Era un enlace simbólico.

ENOSPC

nombre de ruta fue creado pero el dispositivo que contiene nombre de ruta no tiene espacio para el nuevo archivo.

ENOMEM

La memoria del kernel insuficiente estaba disponible.

EMFILE

El proceso ya tiene el número máximo de archivos abiertos.

ENFILE

Se ha alcanzado el límite en el número total de archivos abiertos en el sistema.

De acuerdo a

SVr4, SVID, POSIX, X / OPEN, BSD 4.3 ElO_NOFOLLOW yO_directorio Las banderas son específicas de Linux. Uno puede tener que definir el_GNU_SOURCE macro para obtener sus definiciones.

Restricciones

Hay muchas infelicidades en el protocolo subyacente de NFS, que afectan entre otrasO_SYNC yCON RETRASO.

POSIX proporciona tres variantes diferentes de E / S sincronizadas, correspondientes a los indicadoresO_SYNC , O_DSYNC y O_RSYNC. Actualmente (2.1.130) todos estos son sinónimos en Linux.