Para la mayoría de los sistemas de archivos , un programa inicializa el acceso a un archivo en un sistema de archivos mediante la llamada al sistema abierto . Esto asigna recursos asociados al archivo (el descriptor de archivo ) y devuelve un identificador que el proceso usará para referirse a ese archivo. En algunos casos, la apertura se realiza mediante el primer acceso.
El mismo archivo puede ser abierto simultáneamente por varios procesos, e incluso por el mismo proceso, dando como resultado varios descriptores de archivo para el mismo archivo; dependiendo de la organización y el sistema de archivos. Las operaciones en los descriptores, como mover el puntero del archivo o cerrarlo, son independientes; no afectan a otros descriptores del mismo archivo. Las operaciones en el archivo, como una escritura , se pueden ver mediante operaciones en los otros descriptores: una lectura posterior puede leer los datos recién escritos.
Durante el open
, el sistema de archivos puede asignar memoria para búferes o puede esperar hasta la primera operación.
Se resuelve la ruta absoluta del archivo . Esto puede incluir conectarse a un host remoto y notificar a un operador que se requiere un medio extraíble. Puede incluir la inicialización de un dispositivo de comunicación. En este punto, se puede devolver un error si el host o el medio no está disponible. Se realiza el primer acceso al menos al directorio dentro del sistema de archivos. Por lo general, se devolverá un error si los componentes de nivel superior de la ruta ( directorios ) no se pueden ubicar o acceder. Se devolverá un error si se espera que el archivo exista y no lo hace o si el archivo no debería existir y existe.
Si se espera que el archivo exista y existe, el acceso al archivo, según lo restringido por las banderas de permisos dentro de los metadatos del archivo o la lista de control de acceso , se valida con el tipo de operaciones solicitado. Esto generalmente requiere un acceso adicional al sistema de archivos, aunque en algunos sistemas de archivos, los meta-indicadores pueden ser parte de la estructura del directorio.
Si se está creando el archivo, el sistema de archivos puede asignar la cantidad inicial predeterminada de almacenamiento o una cantidad especificada según las capacidades del sistema de archivos. Si esto falla, se devolverá un error. Se puede realizar la actualización del directorio con la nueva entrada o se puede retrasar hasta que se realice el cierre .
Varios otros errores que pueden ocurrir durante la apertura incluyen fallas de actualización de directorio, múltiples conexiones no permitidas, fallas de medios, fallas de enlaces de comunicación y fallas de dispositivos.
El valor de retorno siempre debe examinarse y tomarse una acción específica del error.
En muchos casos, la apertura de la biblioteca en tiempo de ejecución específica del lenguaje de programación puede realizar acciones adicionales, incluida la inicialización de una estructura de biblioteca en tiempo de ejecución relacionada con el archivo.
Tan pronto como ya no se necesite un archivo, el programa debería cerrarlo. Esto hará que los búferes del sistema de archivos y la biblioteca en tiempo de ejecución se actualicen en los medios físicos y permitirá que otros procesos accedan a los datos si se hubiera requerido un uso exclusivo. Algunas bibliotecas en tiempo de ejecución pueden cerrar un archivo si el programa llama a la salida en tiempo de ejecución. Algunos sistemas de archivos pueden realizar las operaciones necesarias si el programa termina. Es probable que ninguno de estos suceda en caso de un fallo del kernel o del suministro eléctrico. Esto puede causar estructuras del sistema de archivos dañadas que requieran la ejecución de utilidades del sistema de archivos prolongadas y privilegiadas durante las cuales todo el sistema de archivos puede ser inaccesible.
argumentos de llamada abierta
- El nombre de la ruta al archivo,
- El tipo de acceso solicitado al archivo (leer, escribir, adjuntar, etc.),
- El permiso de archivo inicial se solicita mediante el tercer argumento llamado
mode
. Este argumento es relevante solo cuando se está creando un nuevo archivo.
Después de usar el archivo, el proceso debe cerrar el archivo usando la llamada de cierre , que toma el descriptor de archivo del archivo para ser cerrado. Algunos sistemas de archivos incluyen una disposición para permitir la liberación del archivo.
Algunos lenguajes de computadora incluyen bibliotecas en tiempo de ejecución que incluyen funcionalidad adicional para sistemas de archivos particulares. La rutina abierta (o alguna rutina auxiliar) puede incluir especificaciones para el tamaño de la clave, el tamaño del registro y la velocidad de conexión. Algunas rutinas abiertas incluyen la especificación del código del programa que se ejecutará en caso de error.
Formulario de lenguaje Perl
abrir ARCHIVO , MODO [, EXPR ]
por ejemplo:
open ( my $ fh , ">" , "output.txt" );
Perl también usa la tie
función del Tie::File
módulo para asociar una matriz con un archivo. [1] La tie::AnyDBM_File
función asocia un hash con un archivo. [2]
Definición de POSIX de la biblioteca C
La convocatoria abierta está estandarizada por la especificación POSIX para lenguaje C :
int open ( const char * path , int oflag , ... / *, mode_t mode * / ); int openat ( int fd , const char * path , int oflag , ...); int creat ( const char * camino , mode_t modo ); ARCHIVO * fopen ( const char * restringir nombre de archivo , const char * restringir modo );
El valor devuelto es un descriptor de archivo que es una referencia a una estructura específica de proceso que contiene, entre otras cosas, un puntero de posición que indica en qué lugar del archivo actuará la siguiente operación.
Open puede devolver -1 indicando una falla al errno
detallar el error.
El sistema de archivos también actualiza una tabla global de todos los archivos abiertos que se utiliza para determinar si un archivo está actualmente en uso por algún proceso.
camino
El nombre del archivo para abrir. Incluye la ruta del archivo que define dónde, en qué sistema de archivos, se encuentra el archivo (o debería crearse).
openat
espera un camino relativo.
oflag
Este argumento se forma al combinar con OR los parámetros opcionales y (de < fcntl.h >) uno de:
O_RDONLY
,O_RDWR
yO_WRONLY
Los parámetros de opción incluyen:
O_APPEND
los datos escritos se agregarán al final del archivo. Las operaciones de archivo siempre ajustarán el puntero de posición al final del archivo.
O_CREAT
Cree el archivo si no existe; de lo contrario, la apertura falla al establecer errno en ENOENT.
O_EXCL
Se usa conO_CREAT
si el archivo ya existe, luego falla, estableciendo errno en EEXIST.
O_TRUNC
Si el archivo ya existe, descarte su contenido anterior, reduciéndolo a un archivo vacío. No se aplica a un dispositivo o tubería con nombre.
Los indicadores y errores adicionales se definen en la convocatoria abierta .
creat()
se implementa como:
int creat ( const char * ruta , modo_t modo ) { retorno abierto ( ruta , O_WRONLY | O_CREAT | O_TRUNC , modo ); }
fopen banderas usos de cuerda, tales como r
, w
, a
y +
y devuelve un puntero de archivo utilizado con FGETS , fputs y fclose .
modo
Opcional y relevante solo al crear un nuevo archivo, define los permisos del archivo . Estos incluyen leer, escribir o ejecutar el archivo por parte del propietario, el grupo o todos los usuarios. El modo está enmascarado por la umask del proceso de llamada : los bits establecidos en la umask se borran en el modo.
Ver también
- Descriptor de archivo : cómo funciona y otras funciones relacionadas con
open
Notas
- ^ "Empate :: Archivo" . perldoc.perl.org . Consultado el 7 de agosto de 2011 .
- ^ "AnyDBM_File" . perldoc.perl.org . Consultado el 7 de agosto de 2011 .
Referencias
- Programación avanzada en el entorno UNIX por W. Richard Stevens ISBN 81-7808-096-6
- Concepto y aplicación de UNIX por Sumitabh Das