Se permite la copia textual y distribucin de este documento en su totalidad, por cualquier medio, siempre y cuando se mantenga esta nota de copyright. Introduccin Las funciones bsicas para manejar ficheros se encuentran en la librera de stdio. Con dichas funciones se pueden realizar, entre otras, las siguientes acciones: 1. Crear un fichero 2. Leer y Escribir en un fichero 3. Abrir un fichero 4. Posicionarnos en el fichero y conocer su estado Modos de acceso Antes de realizar una operacin sobre un fichero es necesario obtener un manejador que nos permita referirnos a l (el fichero). Esto es porque la operacin siempre se hace sobre un fichero. Dependiendo del modo de acceso con el que creemos el manejador, podremos realizar unas operacions u otras sobre el fichero asociado: Modo Operacin Lectura (r) Leer, posicionarnos, conocer su estado, otros procesos pueden leer (depende del sistema) Escritura (r) Esctribir, posicionarnos, otros procesos no pueden leer (fichero bloqueado) Lectura/Escritura (r/w) Leer, posicionarnos, escribir, el fichero est bloqueado Adms de estos modos de acceso, C define otros especiales que aaden matices a las operaciones a realizar. Ejemplo: a (append), abrir fichero para escritura posicionandonos al final. Funciones #include <stdio.h> Crear/cerrar manejador: FILE * fopen(const char *path, const char *mode); int fclose(FILE *stream); Lectura/escritura binaria: size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream); size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream); Lectura/escritura texto: int fscanf(FILE *stream, const char *format, ...); int fprintf(FILE *stream, const char *format, ...); Estado y posicionamiento: int feof(FILE *stream); int fseek(FILE *stream, long offset, int whence); Crear/cerrar manejador FILE * fopen(const char *path, const char *mode); Devuelve un manejador para el fichero indicado en path. El manejador se abrir con el modo indicado por mode. En caso de error, devuelve NULL (que es (void *)0). Modos de apertura: r Lectura r+ Lectura/Ecritura, posicinado al principio del fichero w Escritura, trunca el fichero a 0 bytes w+ Lectura/Escritura, trunca el fichero a 0 bytes a Escritura, posicionado al final de fichero (append > aadir) Adems se comtempla la adicin de los moficiadores b y t. b implica binario, y t implica texto. La interpretacin de este modificador depende de la plataforma donde corra el programa y del compilador C que empleemos. Por lo general usaremos t cuando nos refiramos a un fichero en texto (para usar las funciones de lectura/escritura para texto) y b cuando sea binario y empleemos las funciones sorrecpondientes para ese modo. Consultar man fopen para ms informacin. int fclose(FILE *stream); Cierra un manejador de fichero previamente abierto. Es NECESARIO cerrar los ficheros cuando se acaban de utilizar. Lectura/escritura binaria size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream); La funcin fread lee nmemb objetos, cada uno de tamao en bytes size, desde el fichero apuntado por el manejador stream, y los almacena en la memoria apuntada por ptr. El posicionado del fichero se desplaza tantos bytes como se hayan leido. La funcin devuelve el nmero de objetos (no bytes) ledos, o un valor inferior si se llega al final de fichero u ocurre un error (en ese caso puede devolver cero). size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream); La funcin fwrite escribe nmemb objetos, cada uno de tamao en bytes size, hacia el fichero apuntado por el manejador stream, y obtiene los objetos de la memoria apuntada por ptr. El posicionado del fichero se desplaza tantos bytes como se hayan escrito. La funcin devuelve el nmero de objetos (no bytes) escritos, o un valor inferior si ocurre un error. Lectura/escritura texto int fscanf(FILE *stream, const char *format, ...); int fprintf(FILE *stream, const char *format, ...); Funcionan exactamente igual que sus homnimas para leer/escribir en stdout/sdtin. De hecho, stdio define tres manejadores de fichero por defecto: Menajeador Descripcin stdin Entrada standard (habitualmente teclado) stdout Salida standard (habitualmente pantalla) stderr Error standard (habitualmente pantalla) Para ver su funcionamiento consultar los apuntes Funciones de ANSI C (1). Estado y posicionamiento int feof(FILE *stream); Devuelve el estado para el fichero apuntado por el majenador stream. Si se ha llegado al final del fichero devuelve true (1), o false (0) en otro caso. int fseek(FILE *stream, long offset, int whence); Permite cambiar el posicionamiento en un fichero apuntado por stream. Se indica la nueva posicin mediante offset, dependiendo de whence. whence Tipo de posicionamiento SEEK_SET Relativo al principio del fichero SEEK_CUR Relativo a la posicin actual SEEK_END Relativo al final del fichero En caso de xito la funcin devuelve el nmero de bytes que se ha desplazado el posicionamiento, o 1 en caso de error. Ejemplos #include<stdio.h> int main() { FILE *fd; char buffer[32]; /* abrimos un fichero de texto para escritura, como no existe, se crea*/ fd=fopen(fichero.txt,wt); /* si hay un error, fd==NULL, osea fd=(void *)0, que es lo mismo que */ /* decir que fd es falso */ if(!fd) { printf(Error abriendo el fichero\n); exit(1); } /* escribimos una farse en el fichero */ fprintf(fd,Escribiendo dentro del fichero.\n); /* lo cerramos */ fclose(fd); /* lo abrimos otra vez, pero para lectura */ fd=fopen(fichero.txt,rt); if(!fd) { printf(Error abriendo el fichero (2)\n); exit(1); } /* nos posicionamos 12 bytes desde el pricipio del fichero */ /* eso nos situda delante de la palabra dentro */ fseek(fd, 12, SEEK_SET); /* leemos 6 objetos de tamao 1, es decir 6 bytes. Como 1 */ /* caracter es 1 byte, leemos la palabra dentro */ fread(buffer, 1, 6, fd); fclose(fd); printf(ledo: %s\n\n, buffer); /* salida > ledo: dentro */ /* se acab */ return 1; } ltima modificacin: 10/02/03