¡Esta es una revisión vieja del documento!
Archivos
Todas la funciones de acceso a archivos requieren incluir:
#include <stdio.h>
Para operar con archivos se requiere declarar un puntero a un descriptor de archivo:
FILE *in, *out; /* file pointer */
Antes de leer o escribir hay que abrir el archivo. La excepción corresponde a la entrada estándar, salida estándar y salida estándar de errores que ya están abiertos.
in= fopen(nombre, "r"); /* "r" por read */ out= fopen(nombre, "w"); /* "w" por write o "a" por append */ /* fopen retorna NULL en caso de error */
Después de leer o escribir se debe cerrar el archivo para liberar recursos y para asegurar que se escriba todo el contenido de un archivo de salida. De lo contrario, algunos bytes podrían permanecer en buffers internos.
fclose(out);
Leer/escribir de a un caracter:
c= getc(in); putc(c, out);
Devolver un caracter leído, para que se vuelva a leer.
ungetc(c, in);
También se puede usar getchar y putchar para leer/escribir de la entrada/salida estándar. Pero estas son en realidad macros que recurren a getc/putc.
#define getchar() getc(stdin) #define putchar(c) putc((c), stdout)
Entrada/salida con formato:
fprintf(fp, formato, ...); fscanf(fp, formato, ...);
Lectura/escritura de bloques de bytes:
char buf[80]; ssize_t leidos= fread(buf, 80, 1, in); ssize_t escritos= fwrite(buf, 80, 1, out);
Determinar si se llegó al final del archivo:
if (feof(in)) ...
Determinar si ocurrió algún error de lectura/escritura:
if (ferror(out)) ...
Ejemplo: copia de archivos
El siguiente programa copia un archivo:
#include <stdio.h> #include <stdlib.h> void filecopy(FILE *in, FILE *out) { char buf[1024]; for (;;) { size_t size; if ((size= fread(buf, 1, 1024, in))==0) break; if (fwrite(buf, 1, size, out)!=size) { fprintf(stderr, "Error de escritura\n"); exit(1); } } if (ferror(in)) { fprintf(stderr, "Error de lectura\n"); exit(1); } } main(int argc, char *argv[]) { FILE *in, *out; if(argc!=3) { fprintf(stderr, "uso: %s <arch. fuente> <arch. destino>\n", argv[0]); exit(1); } else { if ((in= fopen(argv[1], "r"))==NULL) { fprintf(stderr, "No se puede leer '%s'\n", argv[1]); exit(1); } if ((out= fopen(argv[2], "w"))==NULL) { fprintf(stderr, "No se puede escribir '%s'\n", argv[2]); exit(1); } filecopy(in, out); fclose(in); fclose(out); } }