示例#1
0
int main(int argc, char **argv){
	
	if(argc!=3){
		
		printf("\nmi_mkfs: Error debe escribir: $ ./mi_mkfs <nombre_fichero> <cantidad_bloques>\n");
		
		return -1;
	}
	
	//cantidad_bloques
	unsigned int numBloques = atoi(argv[2]);
	//cantidad_inodos
	unsigned int ninodos = numBloques/4;

	if(numBloques==0){
		printf("\nmi_mkfs: El nº de bloques debe ser mayor a 0.\n");
		
		return -1;
	}
		
	//ETAPA 1:
	unsigned char buf[BLOCKSIZE];
	//Rellenamos de 0's el buffer.
	memset(buf,0,BLOCKSIZE);
	
	//Montamos el dispositivo.
	printf("\nmi_mkfs: Montando el dispositivo...\n");	
	bmount(argv[1]);//nombre_fichero
	printf("\nmi_mkfs: El dispositivo se ha montado con éxito.\n");
	printf("\nmi_mkfs: Realizando escritura...\n");
		
	
	//ETAPA 1:
	//Escribimos todos los bloques en el dispositivo.
	for(int i=0; i<numBloques; i++){
		bwrite(i,buf);
	}
	
	if(initSB(numBloques,ninodos)<0)return -1;
	if(initMB()<0)return -1;
	if(initAI(ninodos)<0)return -1;

	//Se escribe el directorio raíz = inodo raíz.
	reservar_inodo('d',7);

	//Desmontamos el dispositivo.
	printf("\nmi_mkfs: Desmontando el dispositivo...\n");
	bumount();
	
	printf("\nmi_mkfs: Dispositivo desmontado con éxito.\n");

	return 0;
}
示例#2
0
int main(int argc, char **argv){

	if(argc!=3){
		printf("Número de argumentos incorrecto \n");
		return -1;
	}

	unsigned int n_bloques = atoi(argv[2]);	//Número de bloques del FS

	unsigned char buf[blocksize];

	memset(buf,0,blocksize);

	bmount(argv[1]);	//Monta Disco
	int i;

	for (i=0; i<n_bloques-1; i++){	//Llena bloques con 0s
		bwrite(i,buf);
	}
	memset(buf,1,blocksize);

	bwrite(n_bloques,buf);


	int block = n_bloques/4;//Para el cáculo de inodos
	if(initSB(n_bloques, block)==-1){	//Inicializa SB
		printf("Error al escribir superbloque");
	}else{
		printf("Superbloque escrito \n");
	}

	if(initMB(n_bloques)==-1){	//Inicializa MB
		printf("Error al escribir mapa de bits");
	}else{
		printf("Mapa de bits escrito \n");
	}

	int n = tamAI(block);

	if (initAI(n)==-1){	//Inicializa AI
		printf("Error al escribir el array de inodes");
	}else{
		printf("Array de inodes escrito \n");
	}
	int inodoraiz = reservar_inodo('d',7);

	printf("Sistema de ficheros creado correctamente \n");	
	
	bumount();	//Desmonta disco

	return 0;
}
示例#3
0
int main(int argc, char **argv){

int i;
unsigned int fichero;
unsigned int cantidad_bloques;
unsigned int cantInt;
unsigned char buffer[BLOCKSIZE];
unsigned int numInodos;

fichero=bmount(argv[1]);
cantidad_bloques=atoi(argv[2]);
cantInt=atoi(argv[3]); //divisor para la cantidad de inodos de nuestro sistema

if (fichero==-1){
	printf("Error en el montaje del dispositivo en mi_mkfs.c\n");
}
else
{
	memset (buffer,0,BLOCKSIZE);
	for (i=0; i<cantidad_bloques; i++){
		bwrite(i,buffer);
	} 
	printf("i: %i\n",i);
}

numInodos = cantidad_bloques/cantInt;


tamMB(cantidad_bloques);
tamAI(numInodos);
initSB(cantidad_bloques,numInodos);
initMB(cantidad_bloques);
initAI(numInodos);
bumount();

return 0;
}
示例#4
0
int main (int argc,char **argv) {

	if (argc == 2) {

		signal(SIGCHLD,reaper);
	
		mount(argv[1]);
		
		struct inodo in;
		if (leer_inodo(&in, 0) < 0) {
			printf("ERROR (simulacion.c -> mi_stat(/)): Error al leer el estado\n");
		}
		
		struct superbloque SB;
		if (bread(0, (char *)&SB) < 0) {
			printf("ERROR (simulacion.c -> error al leer el superbloque)\n");
		}
		
		if (in.t_bytes > 0) {
			vaciar();
			initSB(SB.n_bloques, argv[1]);
			initMB(SB.n_bloques);
			initAI(SB.n_bloques);
		}
			
			
		int i;
		for (i = 0; i < N_PROCESOS; i++) {
		
			int hilo = fork();
			if (hilo == 0) {
			
				if (proceso(i) < 0) {
					printf("ERROR (simulacion.c): Error al crear el proceso %d.\n", i);
					return (-1);
				}
				exit(0);
			}
			else if (hilo < 0) {
				i--;
				printf("Llamamos al reaper, hilo = %d\n", hilo);
				reaper();
			}
			
			sleep(1);		
		}
	
		while (acabados < N_PROCESOS) {
			pause();
		}
			
		unmount(argv[1]);
	
	}
	else {
		printf("ERROR (simulacion.c): Error, parámetros != de 2 (%d).\n", argc);
		return (-1);
	}
	
	return (0);
}