crear archivo de configuracion swap

Iniciado por ccsponcer3, 18 Mayo 2016, 05:25 AM

0 Miembros y 2 Visitantes están viendo este tema.

ccsponcer3

Hola gente,estoy haciendo un tp para la facu el cual requiere emular el comportamiento de un sistema operativo. En mi caso me toco el swapeo del sistema, memoria virtual.

Lo que se me pide es crear un archivo de configuracion el cual inicialmente deberá ser rellenado con el caracter \0, a fines de inicializar la partición de swap. El tamaño de las páginas escritas en swap es configurable, así como también el nombre de este archivo.

Se nos recomienda hacer uso del comando dd de linux para la creacion del archivo

Bien. googleando bastante encontre lo siguiente:

system(" dd if=/dev/zero of=rutaDelArchivo bs=2M count=4")

if: inicializa en cero el archivo
of: pasa la ruta del archivo
bs: tamaño de paginas
count: cantidad de paginas

el problema es que ahi yo estoy harcodeando los valores y lo que yo deberia hacer es que fuera configurable.  A su vez ya nos dan un archivo de configuracion con lo siguiente:
PUERTO_ESCUCHA   6000
NOMBRE_SWAP         swap.data
CANTIDAD_PAGINAS   512
TAMANIO_PAGINA   25613
RETARDO_COMPACTACION   60000


Osea, lo que yo tendria que hacer es una funcion que reciba el comando dd y que el mismo comando pueda recibir los respectivos NOMBRE_SWAP, CANTIDAD_PAGINAS Y TAMANIO_PAGINA del archivo de configuracion y crear asi el archivo de swap vacio que estoy necesitando.

Espero que no haya sido tan largo y me puedan tirar una mano, gracias!!!

AlbertoBSD

#1
A ver, se ve interezante :)
¿Necesitas que programa en C genere el archivo de configuracion ?

¿ Necesitas que el archivo en C lea la configuracion y posterioremnte mande a llamar a dd con los parametros  necesarios para crear la swap ?

Algo de codigo:
FILE *conf;
char *NOMBRE_SWAP = "Nombre";
char *dd = calloc(1000,1);
char *config = calloc(1000,1);
int count_page = 512;
int size_page = 25613;
snprintf(config,1000,"PUERTO_ESCUCHA\t6000\nNOMBRE_SWAP\t%s\nCANTIDAD_PAGINAS\t%i\nTAMANIO_PAGINA\t%i\nRETARDO_COMPACTACION\t60000",NOMBRE_SWAP,count_page,size_page);
snprintf(dd,1000,"dd if=/dev/zero of=%s bs=%i count=%i",NOMBRE_SWAP,count_page,size_page);
exec(dd);

conf = fopen("Test","w");
fprintf(conf,"%s",config);



Saludos!
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

ccsponcer3

Claro pero yo tengo un archivoConfigSwap.cfg en algun lado que tiene esto:
PUERTO_ESCUCHA= 6000
NOMBRE_SWAP= swap.data
CANTIDAD_PAGINAS= 512
TAMANIO_PAGINA=25613
RETARDO_COMPACTACION=60000


y yo en alguna funcion mia, ponele "crearParticionSwap" recibo el comando dd y dicho comando recibe para of NOMBRE_SWAP, para bs TAMANIO_PAGINA y para count CANTIDAD_PAGINA y con eso crea la particion vacia de dicho tamaño y dicho nombre

osea recibe lo que tiene cada una de esas variables del archivo .cfg lo que no entiendo es como invocarlas siendo un archivo aparte y como el comando dd lo recibe... ademas en algun lado tengo que colocar la ruta del archivo .cfg de donde voy a sacar lo anterior y no se como.

Igual tu codigo esta bien, pero no es justamente asi. Me estoy quemando el coco jaja
Gracias por la ayuda!

AlbertoBSD

Solucion fscanf

Codigo:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main() {
FILE *conf = NULL;
char *config_file = "config.txt";
char *nombre_swap = calloc(50,1);
char *dd = calloc(1000,1);
int count_page = 0;
int size_page = 0;
conf = fopen(config_file,"r");
if(conf) {
fgets(dd,1000,conf); //Saltamos la primer linea
fscanf(conf,"NOMBRE_SWAP=%s\n\r",nombre_swap);
fscanf(conf,"CANTIDAD_PAGINAS=%d\n\r",&count_page);
fscanf(conf,"TAMANIO_PAGINA=%d\n\r",&size_page);
memset(dd,0,1000);
snprintf(dd,1000,"dd if=/dev/zero of=%s bs=%i count=%i",nombre_swap,count_page,size_page);
printf("dd command: %s\n",dd);
//exec(dd); //Ejecutar dd
}
else {
printf("no se puede abrir el archivo de configuracion\n");
}
}


Salida:
C:\Users\alberto\Desktop>cfg.exe
dd command: dd if=/dev/zero of=swap.data bs=512 count=25613


Solo le tienes que poner el nombre de tu archivo de configuracion y descomentar la linea del exec

Saludos!
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW