Está en la página 1de 5

FICHEROS EN C

2002 Juan J. Martnez <jjm@usebox.net>


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

También podría gustarte