9.5)Archivo Binarios.Una forma eficiente de almacenar números en el disco consiste en utilizar archivos binarios. En este tipo de archivos no se almacenan los números como cadenas de caracteres sino que se almacenan de la misma forma que se hace en memoria. El contenido de los archivos binariosno puede ser visualizado mediante un editor de textos.
9.5.1)Apertura y Cierre de Archivo Binarios.
Las operaciones de apertura y cierre para archivos binarios son exactamente las mismas que las vistas para archivos de texto fopen y fclose. También los modos de apertura son los mismos. La única diferencia radica en que hay que añadir una b de "binary" al modo de apertura, es decir, rb, wb, ab, rb+, wb+ y ab+, manteniendo el mismo significado que para archivos de texto. Una vez creado un archivo con un tipo determinado (binario o de texto) ya no se le puede cambiar el modo de acceso, las operaciones de lectura y escritura han de ser las específicas para cada tipo de archivo.
9.5.2)Lectura y Escritura de Archivo Binarios.
Las funciones de lectura y escritura ya no son las mismas que para los archivos de texto. Mientras que fscanf y fprintf realizan una conversión del tipo de dato a cadena de caracteres, en los archivo binarios esto es innecesario. Por este motivo hay que utilizar otras funciones. La función utilizada para leer datos de un archivo binario es fread y la función utilizada para escribir datos en un archivo binario es fwrite. Estas funciones son independientes del tipo de dato que se lea o escriba, es decir, no realizan ninguna interpretación del tipo de dato.
La especificación de las funciones fread y fwrite es la siguiente:
Para fread:size_t fread(void *p, size_t size, size_t n, FILE *pf)size_t fwrite(void *p, size_t size, size_t n, FILE *pf)
Para fwrite:
- El puntero p apunta a la variable en la cual se almacenarán los datos leídos del archivo binario.
- El argumento size contiene el número de bytes que componen cada uno de los elementos que van a ser leídos.
- El argumento n contiene el número de elementos de tamaño size que han de leerse.
- El cuarto argumento es el puntero o descriptor de fichero que devuelve la función fopen.
El tipo de dato size_t está definido en el fichero <stdio.h>. Su definición es la siguiente:
- El puntero p apunta a la variable en la cual se encuentran los datos que se escribirán en el fichero.
- El argumento size contiene el número de bytes que componen cada uno de los elementos que van a ser escritos en el archivo binario.
- El argumento n contiene el número de elementos de tamaño size que se van a escribir.
- El cuarto argumento es el puntero o descriptor de fichero que devuelve la función fopen.
El tipo size_t no es más que un entero sin signo; la razón de utilizar este tipo de dato y no la de unsigned directamente no es otra que la de distinguir el tipo de dato cuando se utiliza en la lectura o escritura dc archivos binarios.typedef unsigned size_tAmbas funciones devuelven el número de ítems leídos o escritos, 0 en caso de que no se haya leído o escrito ninguno.
Es posible almacenar varios datos en disco a la vez y no necesariamente uno a uno.