txt manejo lenguaje leer guardar ejercicios datos binarios archivos archivo c file stdio

manejo - guardar y leer datos en un archivo.txt en c



¿Qué es exactamente la palabra clave FILE en C? (4)

He empezado a aprender algo de C como pasatiempo y he usado ciegamente FILE como una declaración para los punteros de archivos durante bastante tiempo, y me he estado preguntando. ¿Es esta una palabra clave o un tipo de datos especial para que C maneje archivos? ¿Contiene un flujo al archivo dentro y otros datos? ¿Por qué se define como un puntero?

Un ejemplo para mostrar lo que quiero hacer para que sea un poco más claro:

FILE* fp; //<-- this fp = fopen("datum.txt", "r"); while(!feof(fp)) { // etc. }


¿Es esta una palabra clave o un tipo de datos especial para que C maneje archivos?

A lo que te refieres es a una estructura predeterminada que usa la biblioteca io estándar para contener los datos apropiados para el uso de fopen y su familia de funciones.

¿Por qué se define como un puntero?

Con un puntero a una estructura, puede pasarlo como parámetro a una función. Esto es, por ejemplo, lo que fgets o fgetc aceptarán, en forma de function(FILE* fp)

La función fopen devolverá un puntero a una estructura de ARCHIVO recién creada, asignando este nuevo puntero a uno no utilizado hará que apunten a la misma cosa.

¿Contiene un flujo al archivo dentro y otros datos?

La definición de la estructura parece un poco más ilusoria que su descripción. Esto se toma directamente de mi stdio.h, de MinGW32 5.1.4

typedef struct _iobuf { char* _ptr; int _cnt; char* _base; int _flag; int _file; int _charbuf; int _bufsiz; char* _tmpfname; } FILE;

Lo que incluye el comentario encantador antes de que:

Algunos creen que nadie en su sano juicio debería hacer uso de los elementos internos de esta estructura.

Los contenidos de esta estructura parecen cambiar mucho en otras implementaciones, las fuentes de glibc generalmente tienen algún tipo de comentario, pero su estructura para esto está enterrada bajo un montón de código.

Tendría sentido prestar atención a la advertencia mencionada y no preocuparse por lo que hace. :)



No es una palabra clave, es un tipo de datos definido en el estándar ANSI C para operar con archivos. Normalmente apunta a una estructura interna que describe el archivo y su estado actual a las funciones de la biblioteca.


FILE es un identificador usado como un nombre typedef, generalmente para una struct . La librería stdio usualmente tiene algo como

typedef struct { ... } FILE;

algun lado. Todas las funciones de stdio relacionadas con punteros de ARCHIVO conocen los contenidos de ... y pueden acceder a los miembros de la estructura. Los programadores de C deben usar funciones como fopen , feof , ferror , ungetc , etc. para crear y operar en estructuras de ARCHIVOS. Dichos tipos se llaman opacos (es decir, no puede mirar dentro de ellos pero debe usar funciones de acceso).

¿Por qué se define como un puntero?

No lo es Es una estructura a la que su código declara un puntero. Tenga en cuenta el asterisco en su

FILE* fp;

que es otro ejemplo de por qué el asterisco debe ir con el identificador de variable, no el nombre de tipo:

FILE *fp;