Subrutina fopen, fopen64, freopen, freopen64, fopen_s o fdopen
Finalidad
Abre una corriente y maneja las violaciones de restricción de tiempo de ejecución.
Biblioteca
Biblioteca C estándar (libc.a)
Sintaxis
#define STDC_WANT_LIB_EXT1 1
FILE *fopen ( Path, Type)
const char *Path, *Type;
FILE *fopen64 ( Path, Type)
char *Path, *Type;
FILE *freopen (Path, Type, Stream)
const char *Path, *Type;
FILE *Stream;
FILE *freopen64 (Path, Type, Stream)
char *Path, *Type;
FILE *Stream;
FILE *fdopen ( FileDescriptor, Type)
int FileDescriptor;
const char *Type;
errno_t fopen_s ( streamptr, nombre de archivo, modo)
ARCHIVO * *streamptr ;
const char * nombre de archivo ;
const char * modo ;
Descripción
Las subrutinas fopen y fopen64 abren el archivo denominado por el parámetro Vía y asocian una corriente con ella y devuelven un puntero a la estructura ARCHIVO de esta corriente.
Al abrir un archivo para la actualización, puede realizar operaciones de entrada y salida en la corriente resultante. Sin embargo, una operación de salida no puede ser seguida directamente por una operación de entrada sin una llamada de subrutina fflush o una operación de posicionamiento de archivos (subrutinafseek, fseeko, fseeko64, fsetpos, fsetpos64 o rebobinado ). Además, una operación de entrada no puede ser seguida directamente por una operación de salida sin una operación de vaciado o posicionamiento de archivo, a menos que la operación de entrada encuentre el final del archivo.
Cuando se abre un archivo para la adición (es decir, cuando el parámetro Tipo se establece en a), es imposible sobrescribir la información que ya está en el archivo.
Si dos procesos separados abren el mismo archivo para añadir, cada proceso puede escribir libremente en el archivo sin destruir la salida que está escribiendo el otro. La salida de los dos procesos se entremezcla en el orden en que se graba en el archivo.
Las subrutinas freopen y freopen64 primero intentan vaciar la corriente y cerrar cualquier descriptor de archivo asociado con el parámetro Corriente . Se ignora el error al desechar la corriente o cerrar el descriptor de archivo.
Las subrutinas freopen y freopen64 sustituyen el archivo con nombre en lugar de la corriente abierta. La corriente original se cierra independientemente de si la apertura posterior tiene éxito. Las subrutinas freopen y freopen64 devuelven un puntero a la estructura ARCHIVO asociada al parámetro Corriente . Las subrutinas freopen y freopen64 se utilizan normalmente para conectar las corrientes preabiertas asociadas con las corrientes de entrada estándar (stdin), salida estándar (stdout) y error estándar (stderr) a otros archivos.
La subrutina fdopen asocia una corriente con un descriptor de archivo obtenido de una subrutina openx , subrutina dup , subrutina creat o subrutina pipa . Estas subrutinas abren archivos pero no devuelven punteros a estructuras ARCHIVO . Muchas de las subrutinas de paquete de E/S estándar requieren punteros a estructuras ARCHIVO .
El parámetro Tipo para la subrutina fdopen especifica la modalidad de la corriente, como por ejemplo r para abrir un archivo para lectura, o a para abrir un archivo para la adición (escritura al final del archivo). El valor de modalidad del parámetro Tipo especificado con la subrutina fdopen debe estar de acuerdo con la modalidad del archivo especificado cuando el archivo se abrió o creó originalmente.
El valor más grande que se puede representar correctamente en un objeto de tipo off_t se establecerá como el máximo de desplazamiento en la descripción de archivo abierto.
La subrutina fopen_s abre el archivo utilizando el nombre de la serie al que apunta el parámetro nombre de archivo y asocia una corriente con el archivo.
Los archivos se abren para escritura con acceso exclusivo (también conocido como no compartido). Si se crea el archivo y el primer carácter del parámetro modo no es u, y si el sistema subyacente da soporte al concepto de modalidad exclusiva, el archivo tiene un permiso que impide que otros usuarios del sistema accedan al archivo.
Si el archivo se crea y el primer carácter del parámetro modo es u, el archivo retiene los permisos de acceso al archivo por omisión del sistema hasta que se cierra el archivo.
Si el archivo se abre satisfactoriamente, el puntero a la estructura ARCHIVO al que apunta el parámetro streamptr se establece en el puntero que apunta al objeto que controla el archivo abierto. De lo contrario, el puntero a la estructura ARCHIVO al que apunta el parámetro streamptr se establece en un puntero nulo y el archivo retiene los permisos de acceso de archivo por omisión del sistema hasta que se cierra el archivo.
Restricciones de tiempo de ejecución
- Para la subrutina fopen_s , los parámetros streamptr, nombre de archivo o modo no deben ser un puntero nulo.
- Si hay una violación de restricción de tiempo de ejecución, la subrutina fopen_s no intenta abrir un archivo. Si el parámetro streamptr no es un puntero nulo, la subrutina fopen_s establece el parámetro streamptr en el puntero nulo.
Parámetros
| Elemento | Descripción |
|---|---|
| Vía | Apunta a una serie de caracteres que contiene el nombre del archivo que se va a abrir. |
| tipo | Apunta a una serie de caracteres que tiene uno de los valores siguientes:
Nota:
|
| Flujo | Especifica la corriente de entrada. |
| FileDescriptor | Especifica un descriptor de archivo abierto válido. |
| streamptr | Especifica la corriente que está asociada al nombre de archivo y el valor no puede ser nulo. |
| nombrearchivo | Especifica el nombre de archivo que se debe abrir y el valor no puede ser nulo. |
| modalidad | El valor no puede ser nulo. El parámetro de modalidad es el mismo que el parámetro Tipo descrito para la subrutina fopen , con la adición de que las modalidades que empiezan por el carácter w o a pueden ir precedidas por el carácter u tal como se muestra a continuación:
Nota: Si el parámetro modo no está precedido por u, los permisos de archivo sólo son usuarios.
|
Valores de retorno
Si la subrutina fdopen, fopen, fopen64, freopen o freopen64 no es satisfactoria, se devuelve un puntero nulo y la variable global errno se establece para indicar el error.
La subrutina fopen_s devuelve un cero si abre el archivo. Si el archivo no se abre o si hay una violación de restricción de tiempo de ejecución, la subrutina fopen_s devuelve un valor distinto de cero.
Códigos de error
Las subrutinas fopen, fopen64, freopen y freopen64 no tienen éxito si se cumple lo siguiente:
| Elemento | Descripción |
|---|---|
| EACCES | Se deniega el permiso de búsqueda en un componente del prefijo de vía de acceso, el archivo existe y se deniegan los permisos especificados por la modalidad, o el archivo no existe y se deniega el permiso de escritura para el directorio padre del archivo que se va a crear. |
| ELOOP | Se han encontrado demasiados enlaces simbólicos en la vía de acceso de resolución. |
| EINTR | Se ha recibido una señal durante el proceso. |
| EISDIR | El archivo con nombre es un directorio y el proceso no tiene acceso de escritura. |
| ENAMETOOLONG | La longitud del nombre de archivo excede PATH_MAX o un componente de nombre de vía de acceso es más largo que NAME_MAX. |
| EMFILE | El número máximo de archivos permitidos actualmente está abierto. |
| ENOENT | El archivo especificado no existe o el parámetro Descriptor de archivo apunta a una serie vacía. |
| ENOSPC | El archivo aún no se ha creado y el directorio o el sistema de archivos para contener el archivo nuevo no se puede expandir. |
| ENOTDIR | Un componente del prefijo de vía de acceso no es un directorio. |
| ENXIO | El archivo con nombre es un archivo especial de tipo carácter o bloque, y el dispositivo asociado a este archivo especial no existe. |
| EVERFLOW | El archivo con nombre es un archivo normal y el tamaño del archivo no se puede representar correctamente en un objeto de tipo off_t. |
| EROFS | El archivo especificado reside en un sistema de archivos de sólo lectura y no tiene acceso de escritura. |
| ETXBSY | El archivo es un archivo de procedimiento puro (texto en rojo) que se está ejecutando y el proceso no tiene acceso de escritura. |
Las subrutinas fdopen, fopen, fopen64, freopen y freopen64 no tienen éxito si se cumple lo siguiente:
| Elemento | Descripción |
|---|---|
| EINVAL | El valor del argumento Tipo no es válido. |
| EINVAL | El valor del argumento modo no es válido. |
| EMFILE | Las corrientes de FOPEN_MAX están abiertas actualmente en el proceso de llamada. |
| EMFILE | Las corrientes de STREAM_MAX están abiertas actualmente en el proceso de llamada. |
| ENAMETOOLONG | La resolución de nombre de vía de acceso de un enlace simbólico produjo un resultado intermedio cuya longitud excede de PATH_MAX. |
| ENOMEM | No hay suficiente espacio de almacenamiento disponible. |
Las subrutinas freopen y fopen no tienen éxito si se cumple lo siguiente:
| Elemento | Descripción |
|---|---|
| EVERFLOW | El archivo con nombre es un tamaño mayor que 2 Gigabytes. |
La subrutina fdopen no es satisfactoria si se cumple lo siguiente:
| Elemento | Descripción |
|---|---|
| EBADF | El valor del parámetro Descriptor de archivo no es válido. |
POSIX
| Elemento | Descripción |
|---|---|
| w | Trunca a 0 longitud o crea un archivo de texto para escritura. |
| w + | Trunca a 0 la longitud o crea el archivo de texto para la actualización. |
| < | Abre o crea un archivo de texto para escribir al final del archivo. |
| a + | Abre o crea un archivo de texto para la actualización, escribiendo al final del archivo. |
SAA
Al menos ocho corrientes, incluyendo tres corrientes de texto estándar, pueden abrirse simultáneamente. Se admiten las modalidades tanto binarias como de texto.