undefined
Tabla de fichas | Indice del Tema | 1002 |
1001 | 1002 | 1003 | 1004 | 1005 | 1006 | 1007 | 1008 |
![]() Universidad de Salamanca | ![]() Departamento de Informática y Automática | TRATAMIENTO DE ARCHIVOS © 2006- José R. García-Bermejo Giner |
fopen()
.
fopen()
. Las funciones de lectura y escritura son, entre otras,
fprintf()
,
fscanf()
,
fread()
y
fwrite()
. Las dos primeras efectúan una traducción a formato de texto, mientras que las dos segundas trasiegan bytes en uno u otro sentido sin efectuar traducción alguna. En el transcurso de la lectura el lenguaje C mantiene, para cada archivo, un contador o puntero que señala el próximo byte del archivo en el que se va a escribir, o el próximo byte del archivo que va a leer. El valor de este contador se puede manipular mediante la sentencia de posicionamiento
fseek()
, que hace posible acceder exactamente al byte deseado (acceso directo).
FILE
, o más exactamente en punteros de estas estructuras. De este modo, siempre que se desee hacer uso de un archivo, será preciso declarar el puntero de
FILE
correspondiente,
FILE * fp;por ejemplo. Evidentemente, este puntero no tiene, en este momento, un valor definido. Para darle valor, se recurrirá a una función de apertura, encargada de reservar dinámicamente espacio para una estructura de tipo
FILE
. La función
fopen()
se encarga de realizar la operación de apertura del archivo, esto es, de preparar un flujo (
stream
) que servirá como canal de comunicación con el archivo.
fopen()
tiene el prototipo siguiente:
FILE *fopen( const char *nombre, const char *modo );
r
), solo escritura (
w
), lectura y escritura (
+
) o de adición (
a
). La función
fopen()
t iene el comportamiento que puede verse en la tabla siguiente:Si el archivo... | Modo r | Modo w | Modo a |
EXISTE,
fopen()
|
|
|
|
NO EXISTE,
fopen()
|
Proporciona el puntero
NULL
, indicando que no ha sido posible abrir el archivo en modo de lectura.
|
|
|
FOPEN_MAX
que se define en
stdio.h
. Además, cada estructura de tipo
FILE
ocupa un espacio en memoria; carece de sentido tener más archivos abiertos que los estrictamente necesarios.
ftell()
, y también se puede especificar este valor, mediante
fseek()
. Véanse a continuación algunas funciones relacionadas con el puntero de archivo, que nos permiten controlar archivos de manera flexible.
int fseek(FILE *fp, long offset, int modo);
|
Esta función tiene la misión crucial consistente en situar el puntero de lectura y escritura del archivo en la posición deseada. Esta posición se mide en bytes mediante el segundo argumento; el primero es el archivo tratado y el tercero es el modo en que se contarán esos modos. Se admiten varios modos:
SEEK_SET
,
SEEK_CUR
y
SEEK_END
. El primer modo indica que el desplazamiento se cuenta desde el principio del archivo; el último indica que el desplazamiento se mide desde el final del archivo, y el segundo denota un desplazamiento respecto a la posición actual del archivo. Esta función es esencial ya que los procesos de lectura hacen saltar el puntero de archivo.
|
long ftell(FILE *stream);
|
Esta función indica el número del próximo byte del archivo que será afectado por la próxima operación de lectura o escritura. Véanse también
rewind()
,
fgetpos()
y
fsetpos()
.
|
size_t | fwrite( |
const void * ptr, size_t longitud, size_t num_elementos, FILE * fp |
); |
Esta función es la inversa de la función
fread()
. Su primer argumento es la dirección de la variable que se quiere escribir en disco. El segundo indica la longitud que posee cada elemento de esta variable (la función está destinada al tratamiento de listas). El tercer argumento indica el número de elementos de la tabla que se quieren escribir. El cuarto elemento es el puntero de archivo en sí.
|
size_t | fprintf( |
FILE * fp, const char * formato, expresión_1, expresión_,... |
); |
Esta función es la inversa de la función
fscanf()
. Su primer argumento es el archivo en el cual se desea hacer la lectura. El segundo argumento es el formato con que debe hacerse ésta; el tercero son las direcciones de las variables de destino de esa información. Es preciso tener en cuenta que se respetan (al leer de archivo) las convenciones habituales de separación entre elementos (al leer de teclado).
|
size_t | fputs( |
const char *, FILE * fp |
); |
Esta función es la inversa de la función
fgets()
. Su primer argumento es la cadena de origen de la información y el segundo es el archivo de escritura. Sirve para escribir cadenas completas. En este sentido resulta de especial utilidad como complemento de
sprintf()
Consúltese la documentación de
stdio.h
.
|
int | fgetc( | FILE * fp | ); |
Lee exactamente un carácter de
fp
, y lo proporciona en forma de
int
. Su valor se puede asignar a un
char
.
|
char * | fgets( |
char * donde, int n, FILE * fp |
); |
Lee
n-1
caracteres de
fp
y los almacena en
*donde
. Si llega a un
\n
también se detiene, incluyendo el retorno. Si no lee nada, proporciona NULL. Si lee algo, proporciona un puntero de la matriz de caracteres en que se ha almacenado lo leído,
donde
.
|
int | fscanf( |
FILE * fp, const char * frmt, ... |
); |
Esta función posee un comportamiento similar al de
scanf()
para el teclado. Su utilidad se ve reducida en el caso de que los valores alfanuméricos leídos contengan espacios; en tal caso es preciso recurrir al formato encolumnado o delimitado con el fin de disponer de un formato legible con facilidad razonable.
|
int | fread( |
void * ptro, size_t longit_elem, size_t num_elem, FILE * fp |
); |
Esta función permite leer bloques de información sin interpretar su contenido; por tanto, resulta sumamente rápida. El primer argumento es un puntero que señala la variable de destino. El segundo denota la longitud de un registro del archivo. El tercero indica el número de registros presentes en el archivo. El cuarto parámetro indica el archivo en sí. Existen otras funciones de lectura que pueden resultar interesantes en determinadas circunstancias; consúltese la documentación de
stdio.h
.
|
fopen()
. Esto se hace mediante una llamada a
fclose()
, que realiza todas las tareas oportunas.int | fclose( | FILE * fp | ); |
Esta función vuelca a disco lo que pudiera quedar en el búfer y corta la conexión entre
fp
y el archivo especificado en
fopen()
. Consúltese la documentación de
stdio.h
; puede resultar interesante la función
freopen()
.
|
time
o similar.
for()
.
fwrite()
. Cronometrar los tiempos de escritura.
for()
.
fread()
. Cronometrar los tiempos de escritura. Lectura texto | Lectura binario | Escritura texto | Escritura binario | |
---|---|---|---|---|
Uno a uno | ||||
Por bloques |