Sinopsis
#incluir
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. 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. 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. 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. Los errores
De acuerdo a
Restricciones




