Bien estos dias estoy trabajando en un proyecto similar, donde tengo un archivo de X cantidad de Gigabytes desde 2, 4, 8, ... o mas
El detalle que cuando quieres trabajar con estas "particiones" para aprender como los sistemas operativos administran la falta de memoria con un espacio de intercambio en Disco te encuentras con el problema de que debes de administrar "optima-mente" ese espacio, y no significa que debas de ahorrar cada byte, pero es comun que las cosas que almacenas en ese espacio en disco cambien de tamaño o sean borradas poco después de escribirlas.. y por optima-mente me refiero a no perder de vista donde dejas cada cosa y a donde se movió, y que espacios quedan libres.
El codigo para escribir un archivo en Blanco de 4 Gigabytes es el siguiente:
Código
#define KB 1024 #define MB 1048576 register int i = 0; char *buffer = NULL; FILE *archivo = NULL; while(i < 4*KB) { i++; } return 0;
Con eso ya tenemos nuestro espacio para "intercambio", ahora necesitamos tener otro archivo o estructura donde recordemos donde dejamos cada cosa...
Código
struct map_item { uint64_t start; uint64_t end; uint8_t name[80]; };
Suponiendo que esa sea nuestra estructura de donde dejamos las cosas, podríamos tener la siguiente función para recuperar X catidad de bytes desde el archivo.
Código
uint8_t *get_data_from_swap(uint64_t s,uint64_t e) { FILE *swap_file = NULL; uint8_t *data = NULL; uint64_t l,r; l = e-s; if(swap_file) { if(l != r) { } data[l] = 0; } else { } return data; }
Asi solo pedimos el inicio y el final y la función se encarga de leer el archivo y devolvernos un apuntador con los datos solicitados + 1 byte de Caracter NULO
Y esto NO SOLO sirve para "Contenido de memoria", simplemente puede ser una archivo de configuración, con X cantidad de parámetros por ejemplo si estamos haciendo un juego podemos guardar Datos ahi, como récords de los usuarios, nombres, items de juego y una larga lista de etceteras...
Solo tenemos que identificarlos bien y tener las rutinas adecuadas para guardar valores nuevos y "Reacomodar" los items existentes para no dejar huecos libres.