You are on page 1of 13

I.E.S.

Francisco Romero Vargas Departamento de Informtica Fundamentos de Programacin


__________________________________________________________________________________________________________

FUNDAMENTOS DE PROGRAMACIN
Tema 7

Estructuras Externas

1 Administracin de Sistemas Informticos


I.E.S. Francisco Romero Vargas
Departamento de Informtica

__________________________________________________________________________________________________________
Estructuras Externas
0

I.E.S. Francisco Romero Vargas Departamento de Informtica Fundamentos de Programacin


__________________________________________________________________________________________________________

1. INTRODUCCIN.
En la mayora de las aplicaciones, muy especialmente en las de gestin, es
necesario almacenar informacin de forma permanente. Hasta ahora, todos los
mecanismos de almacenamiento de informacin que hemos estudiado (constantes,
variables, estructuras, vectores, punteros, etc.) son voltiles. Es decir, cuando el
programa que los utiliza termina su ejecucin desaparecen y la informacin contenida
en ellos se pierde.
Para resolver este problema se necesitan estructuras de datos externas al
programa. Al ser externas no desaparecern con l. Adems, si dichas estructuras
externas se almacenan en un dispositivo no voltil (un disco, una cinta, un CD-ROM,
...), se puede decir, siempre con una seguridad relativa, que la informacin permanecer
aunque se desconecte el ordenador de la alimentacin, desaparezca el programa que lo
cre, etc.
La estructura de datos externa bsica es el fichero (archivo).

2. CORRIENTES.
En C, los dispositivos tradicionales como terminales, unidades de disco o cinta,
puertos e impresora, son tratados como ficheros. Esto es posible porque, sea cual sea la
naturaleza del dispositivo externo, el sistema de almacenamiento temporal de ficheros
los convierte en un dispositivo lgico denominado corriente (canal, flujo o stream).
Debido a que la corriente es casi independiente del dispositivo que la genera, las
funciones de biblioteca que escriben un fichero en disco pueden ser utilizadas, con las
oportunas variaciones, para producir una salida por impresora o por la consola.
A estos efectos, la entrada estndar de datos (por teclado) se asocia con un
fichero con nombre stdin (Standard Input o entrada de datos estndar), y la salida por
pantalla con stdout (Standard Output o salida de datos estndar).
Fundamentalmente, C distingue dos tipos de corrientes:

Corrientes de texto
Corrientes binarias

Una corriente de texto es una sucesin indefinida de caracteres organizados en


lneas de diversas longitudes o, en trminos informticos, en registros de longitud
indefinida.
Para distinguir el principio y final de cada lnea, C utiliza como separador el
carcter de nueva lnea (LF, Line Feed), ASCII nmero 10 en decimal.
Habitualmente, este tipo de agrupacin de lneas termina con el carcter ASCII
26 (EOF, End Of File).

__________________________________________________________________________________________________________
Estructuras Externas
1

I.E.S. Francisco Romero Vargas Departamento de Informtica Fundamentos de Programacin


__________________________________________________________________________________________________________

En una corriente de texto pueden ocurrir ciertas conversiones de caracteres si


son requeridas por el entorno del sistema. Por ejemplo, un carcter de nueva lnea puede
convertirse en un par retorno de carro/nueva lnea (CR -Carriage Return, ASCII 13
decimal- y LF). Por tanto, puede que no se establezca una relacin de uno a uno entre
los caracteres que se escriben o se leen y los que aparecen en el dispositivo externo.

Una corriente binaria, en cambio, es una secuencia de bytes que tiene una
correspondencia uno a uno con los del dispositivo externo. Es decir, no se producen
conversiones de caracteres. Adems, la cantidad de caracteres escritos o ledos coincide
con la del dispositivo externo. En este caso, cada registro es de longitud fija. As, la
informacin presente en la memoria y la del disco coinciden unvocamente, carcter a
carcter o byte a byte.

3. FICHEROS.
En C, un fichero es un concepto lgico que en el momento de su apertura se
asocia a una corriente y se disocia de sta en el momento del cierre del fichero.
Dependiendo del soporte de almacenamiento, no todos los ficheros tienen las
mismas posibilidades. Por ejemplo, un fichero de disco puede soportar el acceso directo,
mientras que un mdem no. Esto muestra un aspecto importante sobre el sistema de E/S
en C: todas las corrientes son iguales, pero todos los ficheros no.
Si el fichero soporta el acceso directo, la apertura de ese fichero inicializa un
indicador de posicin del fichero al principio del mismo. Cuando se lee o se escribe
cada carcter desde o en el fichero, el indicador de posicin se incrementa, asegurando
la progresin a travs del mismo.
La parte ms pequea de un disco a la que se puede acceder se denomina sector.
La informacin se escribe o se lee desde el disco sector a sector. Por tanto, se va a leer
un sector completo de datos incluso si el programa slo necesita un byte. Estos datos se
colocan en una regin de memoria denominada buffer que puede utilizar el programa.
Cuando los datos se envan a un fichero de disco, se colocan en el buffer hasta que se
acumula un sector completo de informacin y, en ese momento, se escriben fsicamente
en el fichero.
Se puede disociar una corriente de fichero especfico mediante la operacin de
cierre. El cierre supone escribir cualquiera de los contenidos de su buffer asociado en el
dispositivo externo. Este proceso se denomina vaciado de buffer y garantiza que no
quede informacin en l.
Al comienzo de la ejecucin de un programa se abren 5 corrientes de texto
predefinidas:
Corriente
stdin
stdout
stderr

Dispositivo
Teclado
Pantalla
Pantalla

__________________________________________________________________________________________________________
Estructuras Externas
2

I.E.S. Francisco Romero Vargas Departamento de Informtica Fundamentos de Programacin


__________________________________________________________________________________________________________

stdaux (*)
stdprn (*)

Primer puerto serie


Impresora

Los tres primeros flujos estn definidos por el estndar ANSI de C y todo el
cdigo que los utilice es totalmente portable. Los dos ltimos son especficos de
determinados compiladores (*).
NOTA:
Las entradas/salidas estndar de C para manejo de ficheros utilizan punteros a
corrientes asociadas a dispositivos/ficheros, en cambio, las E/S UNIX a nivel de
sistema utilizan descriptores de ficheros (handles).
En este captulo slo vamos a usar la forma estndar de C y el prximo curso
estudiaris la forma UNIX.
As pues, todas las funciones y constantes que vamos a estudiar se encuentran en la
biblioteca stdio.h.

4. MANEJO DE FICHEROS
En la utilizacin de ficheros desde un programa en C se tienen que tener en
cuenta las siguientes operaciones:
1. Declaracin de una variable que identifique el canal de escritura o lectura. Es el
identificador interno del fichero.
2. Declaracin de una variable que contenga el nombre del fichero en disco o cinta.
Es el identificador externo del fichero.
3. Asignacin del identificador externo al identificador interno. Esta operacin se
conoce como apertura de un canal de E/S. En esta accin es necesario indicar
el tipo de fichero (de texto o binario) y el modo de apertura (si va a ser slo de
lectura, si, en cambio, permite aadir registros, etc.).
4. Escritura y/o lectura de datos sobre el fichero.
5. Cierre del fichero, eliminando el canal anteriormente abierto.

Vamos a seguir estos pasos mediante un ejemplo:


Supongamos que tenemos un fichero de texto y queremos realizar una copia.
Supongamos, tambin, que el fichero se llama texto.txt y que la copia se va a llamar
copia.txt, ambos sobre el directorio actual.

Declarar un variable de tipo puntero a fichero (FILE*) que seala hacia una
estructura interna que se refiere al fichero.

C define la estructura de datos FILE en el fichero de cabecera "stdio.h" para el


manejo de ficheros. Nosotros siempre usaremos punteros a estas estructuras, aunque
en UNIX el tratamiento se realiza de forma diferente, mediante manejadores o
descriptores.
__________________________________________________________________________________________________________
Estructuras Externas
3

I.E.S. Francisco Romero Vargas Departamento de Informtica Fundamentos de Programacin


__________________________________________________________________________________________________________

La definicin de sta estructura depende del compilador, pero en general


mantienen un campo con la posicin actual de lectura/escritura, un buffer para mejorar
las prestaciones de acceso al fichero y algunos campos para uso interno.
La declaracin se realiza de la siguiente forma:
FILE *nombre_corriente_fichero;
Y en nuestro ejemplo sera:
FILE * fentrada, * fsalida;

Abrir el fichero mediante la funcin fopen().

Su prototipo es:
FILE *fopen(char *nombre_fichero, char *modo);
Donde nombre_fichero es el nombre externo del fichero a abrir y modo es una
cadena que ndica la forma en que se quiere abrir el fichero, puede ser una de las
siguientes:
Modo
r
w
a
r+
w+
a+

Interpretacin
Abrir slo para lectura. Produce un error si el fichero no existe.
Crear para escritura. Si el fichero ya existe ser machacado.
Aadir. Abre para escribir al final del fichero, o crear para escritura si el fichero
no existe.
Abre para actualizacin. Esto es, lectura y escritura. Produce error si el fichero
no existe.
Crea un nuevo fichero para actualizacin. Si el fichero ya existe es machacado.
Abre para actualizacin al final del fichero o crea el archivo si este no existe.

Para especificar el modo de operacin binario se aade una b al final de la


cadena de modo ("rb", "w+b", ).
El valor de retorno de fopen() ser NULL si se produjo un error.
NOTA:
El cdigo de error se encuentra almacenado en la variable errno (definida en errno.h).
Est variable es utilizada por muchas funciones (sobre todo de stdio) para almacenar el
cdigo de error de la ltima operacin realizada. Hay definidos varios nombres
nemnicos para cada nmero de error (en errno.h). Existe tambin el vector de cadenas
sys_errlist definido en stdlib.h que contiene el significado de cada nmero de error
(pero en ingls, claro).
Pero si fopen() pudo abrir el fichero sin problemas, devuelve un puntero a
una estructura FILE con el que tendremos que referirnos al fichero, es por ello que todas
la funciones relacionadas con ficheros reciben un puntero a esta estructura que indica el
fichero con que se quiere trabajar.
__________________________________________________________________________________________________________
Estructuras Externas
4

I.E.S. Francisco Romero Vargas Departamento de Informtica Fundamentos de Programacin


__________________________________________________________________________________________________________

Y en nuestro ejemplo sera:


fentrada=fopen(texto.txt,r);
fsalida=fopen(copia.txt,w);

Llegado a este punto ya podemos operar con el fichero.

Las operaciones con ficheros las estudiaremos ms adelante. Por ahora, en nuestro
ejemplo slo debes observar la lgica del proceso, donde se usan las siguientes
funciones:
- feof()
Determina si se ha llegado al final del fichero
- fgets()
Lee la siguiente lnea del fichero de texto de entrada
- fputs()
Escribe una lnea en el fichero de texto de salida
Por ltimo, y no menos importante, tendremos que cerrar el fichero con la
funcin fclose().
Cerrar el fichero es muy importante ya que mientras que el mismo est abierto se
mantienen una zona de almacenamiento intermedio (buffer) en memoria parar acelerar
el acceso a la informacin del fichero. Si no lo cerramos corremos el riesgo de perder
esta informacin intermedia que todava no ha sido escrita a disco y de no liberar estas
zonas de memoria. Para cerrar un flujo utilizamos fclose() pasndole en nombre del
flujo. Su prototipo es el siguiente:
int fclose(FILE *fichero);
Que devuelve 0 si se ha cerrado con xito o EOF si se ha producido algn tipo
de error.
Hay tambin otra funcin fcloseall(), la cual cierra todos los flujos
abiertos excepto los predefinidos (stdin, stdout, stdprn, stderr y stdaux). Su forma es:
int fcloseall(void);
Que devuelve en nmero total de flujos cerrados o EOF si ha habido error.

Veamos ahora el listado completo del programa:


//Programa que copia el fichero de texto texto.txt en copia.txt
#include <stdio.h>
#define NOMBREFICHEROE "texto.txt"
#define NOMBREFICHEROS "copia.txt"
void main(void)
{
__________________________________________________________________________________________________________
Estructuras Externas
5

I.E.S. Francisco Romero Vargas Departamento de Informtica Fundamentos de Programacin


__________________________________________________________________________________________________________

FILE *fentrada, *fsalida; // Declaracin de los canales


char texto[80];
fentrada=fopen(NOMBREFICHEROE,"r"); //Apertura del fichero de E
if (!fentrada)
{
printf("El fichero %s no existe",NOMBREFICHEROE);
getchar();
}
else // Se abre con xito
{
fsalida=fopen(NOMBREFICHEROS,"w"); //Apertura del fichero de S
while (!feof(fentrada))
{
fgets(texto,80,fentrada); //Lectura de un registro desde E
fputs(texto,fsalida);
//Escritura de un registro en S
}
fclose(fentrada); //Cierre de los ficheros
fclose(fsalida);
}
}

5. FUNCIONES DE stdio.h PARA MANEJO DE FICHEROS


Para cada fichero abierto es mantenido una especie de puntero de
lectura/escritura que nos indica el lugar del fichero donde se realizar la siguiente
operacin. Este puntero no es ms que un nmero indicando el desplazamiento actual
contando desde el principio del fichero. Hay que indicar tambin que todas estas
funciones actan sobre la variable global de error errno.

Control de fin de fichero.

De forma habitual, los editores de texto y algunos compiladores terminan la


grabacin de un texto escribiendo al final del ltimo registro el signo EOF (End Of
File), generalmente el carcter ASCII 26.
En C, EOF es una constante definida en el fichero stdio.h que, en ficheros
escritos en modo texto usando C o editores de texto ASCII, toma el valor entero 1
cuando el Sistema detecta el ltimo carcter del fichero (ASCII 26).
Si el fichero no es de texto, por ejemplo un .EXE, el mencionado carcter ASCII
26 ser uno ms de los integrantes del fichero. Ms an, no ser reconocido como tal
por un fichero abierto en modo binario por C.
Para solucionar este problema, C dispone de la funcin feof(), que detecta el
final del fichero por la posicin del puntero del Sistema en el mismo o, lo que es lo
mismo, por el byte en que ste est situado respecto al principio del fichero. Su
prototipo es:
int feof(FILE *fichero);
Devuelve un valor verdadero slo si el puntero del E/S ha llegado al final del
fichero (End Of File, EOF).
__________________________________________________________________________________________________________
Estructuras Externas
6

I.E.S. Francisco Romero Vargas Departamento de Informtica Fundamentos de Programacin


__________________________________________________________________________________________________________

Escritura/lectura carcter a carcter.

int fputc(int caracter, FILE *fichero);


Escribe un carcter en el fichero en la posicin apuntada por el puntero.

int fgetc(FILE *fichero);


Lee el siguiente carcter del fichero. Si se alcanza el final de fichero, fgetc()
devuelve un carcter de EOF que permite controlar el final del fichero en corrientes de
texto. No obstante, al ser EOF un carcter ms en corrientes binarias, para detectar el
final de fichero es necesario usar la funcin feof() en estos ficheros.
Ejemplo 1: Creacin de un fichero de texto con dos caracteres (a y z) y lectura
posterior de ste.
#include <stdio.h>
#define NOMBREFICHERO "texto.txt"
void main(void)
{
FILE *f;
char c='a';
if ((f=fopen(NOMBREFICHERO,"w"))==NULL)
{
printf("Imposible crear el fichero %s",NOMBREFICHERO);
getchar();
}
else
{
fputc(c,f);
fputc('z',f);
fclose(f);
f=fopen(NOMBREFICHERO,"r");
c=fgetc(f);
while (c!=EOF)
{
printf("%c\n",c);
c=fgetc(f);
}
getchar();
fclose(f);
}
}

Ejemplo 2: Lectura y presentacin en pantalla (stdout) de un fichero de texto cuyo


nombre se solicita desde teclado.
#include <stdio.h>
void main(void)
{
__________________________________________________________________________________________________________
Estructuras Externas
7

I.E.S. Francisco Romero Vargas Departamento de Informtica Fundamentos de Programacin


__________________________________________________________________________________________________________

FILE *f;
char nombre_fichero[30];
printf("Introduzca el nombre del fichero a presentar: ");
scanf("%s",nombre_fichero); fflush(stdin);
if ((f=fopen(nombre_fichero,"r"))==NULL)
{
printf("El fichero %s no existe",nombre_fichero);
getchar();
}
else
{
while (!feof(f))
fputc(getc(f),stdout);
getchar();
fclose(f);
}
}

Escritura/lectura de cadenas de caracteres.

int fputs(char * cadena, FILE *fichero);


Escribe en el fichero la cadena de caracteres que se le enva como parmetro. Si
el fichero se abre para escritura en forma de texto (w), el terminador \0 de la cadena se
sustituye por el carcter LF en el momento de la grabacin de los datos. Por el contrario,
si el fichero se abre como binario (wb), no se producir ninguna transformacin.
char * fgets(char * cadena, int numero, FILE *fichero);
Lee numero-1 caracteres del fichero y los almacena en cadena. Los caracteres se
leen hasta que se encuentre un carcter LF o EOF o se llegue al lmite especificado.
Una vez ledos los caracteres, incluido el LF, C aade al final de la cadena el
carcter nulo \0 como parte integrante de la misma. Si numero es igual a 1, la cadena
leda es la cadena vaca. ( ).
Ejemplo: Se muestra, de nuevo, el programa con el que se ilustr, en el apartado 4 de
este tema, el manejo de ficheros.
#include <stdio.h>
#define NOMBREFICHEROE "texto.txt"
#define NOMBREFICHEROS "copia.txt"
void main(void)
{
FILE *fentrada, *fsalida;
char texto[80];
fentrada=fopen(NOMBREFICHEROE,"r");
if (!fentrada)
{
printf("El fichero %s no existe",NOMBREFICHEROE);
getchar();
}
__________________________________________________________________________________________________________
Estructuras Externas
8

I.E.S. Francisco Romero Vargas Departamento de Informtica Fundamentos de Programacin


__________________________________________________________________________________________________________

else // Se abre con xito


{
fsalida=fopen(NOMBREFICHEROS,"w");
while (!feof(fentrada))
{
fgets(texto,80,fentrada);
fputs(texto,fsalida);
}
fclose(fentrada);
fclose(fsalida);
}
}

Escritura/lectura formateada.

int fprintf(FILE *fichero, formatos, lista_de_variables);

Escribe una cadena de caracteres en el fichero con el formato y contenido de


lista_de_variables y devuelve el nmero de caracteres escritos. Acta de forma
equivalente a la funcin printf().
int fscanf(FILE *fichero, formatos, lista_de_variables);

Esta funcin lee datos desde el fichero almacenndolos en lista_de_variables.


Retorna el nmero de elementos ledos y asignados realmente a la lista de variables,
separadas por coma, que se indique. Acta igual que la funcin scanf(), pero
tomando los datos de la corriente especificada.
Ejemplo: Creacin y posterior lectura de un fichero de ventas con formato.
#include <stdio.h>
#include <string.h>
void main(void)
{
FILE *f;
char codigo[3];
int precio,cantidad;
if ((f=fopen("ventas.txt","w"))==NULL)
{
printf("No es posible crear el fichero");
getchar();
}
else
{
// Creacin del fichero
printf("Introduzca el cdigo (FIN *): ");
scanf("%s",codigo); fflush(stdin);
while (strcmp(codigo,"*"))
{
printf("Introduzca el precio: ");
scanf("%d",&precio); fflush(stdin);
printf("Introduzca la cantidad: ");
__________________________________________________________________________________________________________
Estructuras Externas
9

I.E.S. Francisco Romero Vargas Departamento de Informtica Fundamentos de Programacin


__________________________________________________________________________________________________________

scanf("%d",&cantidad); fflush(stdin);
fprintf(f,"%3s %d %d",codigo,precio,cantidad);
printf("Introduzca el cdigo (FIN *): ");
scanf("%s",codigo); fflush(stdin);
}
fclose(f);
// Lectura del fichero creado anteriormente
f=fopen("ventas.txt","r");
while (!feof(f))
{
fscanf(f,"%3s %d %d",codigo,&precio,&cantidad);
printf("Cdigo:%s Precio:%d Cantidad:%d",
codigo,precio,cantidad);
}
getchar();
fclose(f);
}
}

Escritura/lectura de bloques o registros.

int fwrite(void *buffer, int longitud, int numero, FILE *fichero);

La funcin fwrite() escribe numero elementos de longitud nmero de bytes


desde la zona de memoria apuntada por buffer al fichero y devuelve el nmero de
caracteres escritos.
Si el fichero se abre en modo texto, cada carcter CR de buffer se sustituye por
el par de caracteres CR LF. Esta transformacin no tiene lugar cuando se abre en
binario.
int fread(void *buffer, int longitud, int numero, FILE *fichero);

La funcin fread() realiza una funcin inversa a la anterior, leyendo desde el


fichero y almacenando los caracteres ledos en la zona de memoria apuntada por buffer.
Buffer puede ser, y lo es a menudo, una variable de cualquier tipo cuya direccin
se indica con el operador &. Otras veces, buffer es una zona de memoria asignada
dinmicamente.
Estas dos instrucciones (fread() y fwrite()) se usan para tratar los
ficheros de la forma tradicional, es decir, leyendo o escribiendo un bloque completo de
datos definido como una estructura tipo registro (un conjunto de campos).
Ejemplo: Creacin del fichero agenda. Cada registro estar formado por un nombre,
una direccin y un nmero de telfono, todos de tipo cadena y se aade la edad para
comprobar el tratamiento de datos numricos.
#include <stdio.h>
#include <string.h>
typedef struct TAgenda registro;
struct TAgenda
__________________________________________________________________________________________________________
Estructuras Externas
10

I.E.S. Francisco Romero Vargas Departamento de Informtica Fundamentos de Programacin


__________________________________________________________________________________________________________

{
char nombre[25];
char direccion[30];
char telefono[12];
int edad;
};
void main(void)
{
registro agenda;
FILE *f;
if ((f=fopen("agenda.dat","wb"))==NULL)
{
printf("No es posible crear el fichero");
getchar();
}
else
{
// Creacin del fichero
printf("Introduzca nuevo nombre (FIN *): ");
gets(agenda.nombre);
while (strcmp(agenda.nombre,"*"))
{
printf("Introduzca direccin: ");
gets(agenda.direccion);
printf("Introduzca telfono: ");
gets(agenda.telefono);
printf("Introduzca edad: ");
scanf("%d",&agenda.edad);fflush(stdin);
fwrite(&agenda,sizeof(agenda),1,f);
printf("Introduzca nuevo nombre (FIN *): ");
gets(agenda.nombre);
}
fclose(f);
// Lectura del fichero creado anteriormente
f=fopen("agenda.dat","rb");
printf("%-25s %-30s %-12s Edad\n",
"Nombre","Direccin","Telfono");
while (!feof(f))
{
fread(&agenda,sizeof(agenda),1,f);
printf("%-25s %-30s %-12s %d\n",
agenda.nombre,agenda.direccion,
agenda.telefono,agenda.edad);
}
getchar();
fclose(f);
}
}

Acceso directo a los registros de un fichero.

En el ejemplo anterior hemos visto que todos los registros del fichero tienen el
mismo tamao, por tanto, es posible acceder a un determinado registro sin necesidad de
acceder a todos los anteriores; es decir, en lugar de realizar un acceso secuencial,
controlado por la funcin feof(), como hemos visto en todos los ejemplos anteriores,
es posible realizar lo que se denomina acceso directo o aleatorio.
__________________________________________________________________________________________________________
Estructuras Externas
11

I.E.S. Francisco Romero Vargas Departamento de Informtica Fundamentos de Programacin


__________________________________________________________________________________________________________

El control de la posicin del cursor en un fichero, es decir, de la posicin del


puntero de lectura/escritura dentro del fichero, se realiza con la siguiente funcin:
int fseek(FILE *fichero, int desplazamiento, int dedonde);
Que coloca el puntero de E/S en la nueva posicin desplazamiento tomando
como referencia para este desplazamiento el indicado por dedonde que puede ser uno de
los siguientes valores:
dedonde
SEEK_SET (0)
SEEK_CUR (1)
SEEK_END (2)

Lugar del fichero


Principio del fichero
Desde la posicin actual
Desde el final del fichero

Un valor negativo en desplazamiento indica un movimiento relativo hacia el


principio del fichero, un valor positivo hacia el final.
Ej:
/*Coloca el puntero al principio del fichero.*/
fseek(mifichero, 0, SEEK_SET);
/*Lo pone al final.*/
fseek(fich, 0, SEEK_END);
/*Mover 15 bytes hacia el final.*/
fseek(fich, 15, SEEK_CUR);
/*Mover 7 bytes hacia el principio.*/
fseek(fich, -7, SEEK_CUR);
/*Ponerlo en el antepenltimo byte del fichero.*/
fseek(fich, -2, SEEK_END);

int ftell(FILE *fichero);


Devuelve el puntero de E/S. Este valor es el desplazamiento, en bytes, relativo
al principio del fichero. Si hay error devuelve 1 y coloca el nmero de error en errno.
Por ejemplo, para conocer la cantidad de registros que contiene el fichero agenda
del ejemplo anterior escribiramos lo siguiente:
fseek(f,0,SEEK_END); // Para situar el puntero al final del fichero
tamanio=ftell(f)/sizeof(agenda);

Existen muchsimas funciones ms de la biblioteca stdio.h para renombrar


ficheros, borrar ficheros, controlar errores, etc. Todas estas funciones, adems del
tratamiento de ficheros a nivel de Sistema (forma UNIX) se estudiarn ms
profundamente en el curso siguiente.
Espero que esta introduccin permita al alumno afrontar sin inconveniente
alguno la asignatura Desarrollo de Funciones en el Sistema Informtico de 2,
asignatura complementaria de Fundamentos de Programacin.
__________________________________________________________________________________________________________
Estructuras Externas
12

You might also like