ARCHIVOS
STREAMS
Un stream es un buffer de almacenamiento de los datos que se envían o reciben en una operación de entrada o salida.
En formato binario no se produce ningún tipo de transformación de los datos
En el formato de texto se producen conversiones de los valores de los datos al formato ASCII.
Cuando sucede que el buffer se lleno se envía el contenido de este al dispositivo de salida.
En el caso de una operación de entrada se toman los datos hasta que se vacíe para realizar un nuevo ingreso de datos desde el dispositivo.
Este sistema de procesamiento de datos tiene la característica que cuando se produce un fin anormal del programa se pierden los datos almacenados en el flujo.
STREAMS STANDARD
Existen 5 streams standars que se abren al iniciar un programa en C
| stdin | Teclado |
|---|---|
| stdout | Pantalla |
| stderr | Pantalla |
| stdprn | Impresora LPT1 |
| stdaux | Puerto serie 1 COM1 |
APERTURA DE ARCHIVOS
FILE *fopen(char *nombre,char *modo)
nombre: nombre, unidad y ruta del archivo
modo: forma de apertura del archivo.
Devuelve un puntero a FILE si es exitoso, si error devuelve NULL.
| ATRIBUTO | SIGNIFICADO |
|---|---|
| r ó rt | Abre un archivo de texto para lectura. Si no existe producirá un error. |
| w ó wt | Crea un archivo de texto para escritura. En el caso de que exista destruye el contenido. |
| a ó at | Abre un archivo de texto para añadir. Si no existe crea uno, si existe agrega los datos al final. |
| rb | Abre un archivo binario para lectura. Si no existe producirá un error. |
| wb | Crea un archivo binario para escritura. En el caso de que exista destruye el contenido. |
| ab | Abre un archivo binario para añadir. Si no existe crea uno, si existe agrega los datos al final. |
| r+ o r+t | Abre un archivo de texto para lectura/escritura. Si no existe no lo crea. |
| w+ o w+t | Crea un archivo de texto para lectura/escritura. Si existe destruye los contenidos del archivo existente. |
| a+ o a+t | Abre o crea un archivo de texto para lectura/escritura. |
| r+b | Abre un archivo binario para lectura/escritura. Si no existe no lo crea. |
| w+b | Crea un archivo binario para lectura/escritura. Si existe destruye los contenidos del archivo existente. |
| a+b | Abre o crea un archivo binario para lectura/escritura. |
CIERRE DE ARCHIVO
int fclose(FILE *fp)
fp: puntero asociado al archivo
Devuelve 0 si se ejecuta correctamente, si ocurre un error EOF.
ESCRITURA/LECTURA DE UN CARÁCTER
int fgetc(FILE *fp)
fp: archivo asociado
fgetc devuelve el carácter si exitosa, EOF si error
int fputc(int ch,FILE *fp)
ch: carácter a escribir
fp: archivo asociado
fputc devuelve el carácter si exitosa, EOF si error
DETECCION DE EOF Y ERROR
int feof(FILE *fp)
fp: archivo asociado
Devuelve distinto de 0 si EOF, en caso contrario 0
fgetc devuelve el carácter si exitosa, EOF si error
int ferror(FILE *fp)
fp: archivo asociado
Devuelve 0 si no hubo error, si hubo un error distinto de 0
fputc devuelve el carácter si exitosa, EOF si error
ESCRITURA/LECTURA DE STRING
int fputs(char *str,FILE * fp)
fp: archivo asociado
str: string en donde se ubica la cadena a escribir.
fputs devuelve EOF si error, en caso contrario distinto de 0
char *fgets(char *str,int num, FILE *fp)
fp: archivo asociado
num: cantidad de caracteres a leer, hasta '\n' o EOF
str: string en donde se ubica la cadena a leer.
fgets devuelve str si es correcta, en caso contrario NULL
ENTRADA Y SALIDA CON FORMATO
int fprintf(FILE *fp, char *control, ………………);
fp: archivo asociado
control: cadena de control
………………….: lista de variables
Devuelve la cantidad de ítems escritos, si hubo error EOF
int fscanf(FILE *fp, char *control, ………………);
fp: archivo asociado
control: cadena de control
………………….: lista de variables
Devuelve la cantidad de ítems leidos, si hubo error EOF
ESCRITURA/LECTURA DE BLOQUES
size_t fwrite(void *buf, size_t size, size_t n, FILE *fp);
Escribe un bloque
size_t fread(void * buf, size_t size, size_t n, FILE * fp);
Lee un bloque
buf: puntero al bloque
size: tamaño del bloque
n: cantidad de bloques
fp: archivo asociado
size_t: unsigned int
Devuelve la cantidad de bloques, si hubo error un numero < n.
ARCHIVOS ALEATORIOS
Desplazamiento del puntero:
int fseek(FILE *fp, long d, int origen);
fp: archivo asociado
d: desplazamiento
origen: posición de inicio del desplazamiento
Devuelve 0 si no hubo error, si hubo error distinto de cero
| SEEK_SET | Comienzo del archivo |
|---|---|
| SEEK_CUR | Posición actual |
| SEEK_END | Fin del archivo |
Obtención de la posición actual:
long ftell(FILE *fp);
fp: archivo asociado
Devuelve la posición actual del archivo en bytes, si hubo error -1L
BORRAR UN ARCHIVO
int remove(char *nombre);
nombre: unidad, ruta, nombre y extensión del archivo
Devuelve 0 si hubo éxito, si hubo error distinto de 0
RETORNA AL COMIENZO
void rewind(FILE *fp);
fp: archivo asociado
LIBERAR EL BUFFER
int fflush(FILE *fp);
fp: archivo asociado
Devuelve 0 si hubo exito, si hubo error EOF
ESTRUCTURA FILE
| short level | indica que tan vacío o lleno esta el buffer |
|---|---|
| unsigned flags | banderas de estatus del archivo |
| char fd | descriptor del archivo |
| unsigned char hold | ultimo carácter leído en el buffer para utilizar ungetc |
| short bsize | tamaño del buffer |
| unsigned char *buffer | buffer de transferencia de los datos |
| unsigned char *curp | posición actual del cursor del archivo |
| unsigned istemp | indicador de archivo temporal |
| short token | usado para chequeos de validación |