コード例 #1
0
ファイル: leer.c プロジェクト: Thiwer/SistemasOperativos2
int main(int argc, char **argv) {
    bmount(argv[1]);
    int ninodo = atoi(argv[2]);
    unsigned char buffer[BLOCKSIZE];
    memset(buffer, 0, BLOCKSIZE);

    int i = 0;
    int leido = 0;
    printf("Leyendo archivo\n");
 
    while ((leido = mi_read_f(ninodo, buffer, i * BLOCKSIZE, BLOCKSIZE)) > 0) {
        printf("%s", buffer);
        memset(buffer,0,BLOCKSIZE);
        i++;
    }
    printf("\n");

    if (leido == -1) {
        printf("No existe el fichero");
    }
    
    bumount();
}
コード例 #2
0
ファイル: escribir.c プロジェクト: Zemorac/File-System-SOII
int main(int argc, char **argv){

	
	if(argc<3){
		printf("\nescribir: Error debe escribir: $ ./escribir <nombre_fichero> <offset> <inodo(opcinal)>\n");
		printf("*Si no indica el inodo el sistema se encargará de reservar un inodo nuevo.\n");
		return -1;
	}
	struct INODO inodo;
	int ninodo;
	char ruta[128];
	long nbytes;
	long offset = atoi(argv[2]);
	printf("\nescribir: Escribe la ruta del fichero: ");
	scanf("%s",ruta);
	FILE *fichero = fopen(ruta,"r");
	fseek(fichero, 0, SEEK_END); // Colocar el cursor al final del fichero
	nbytes = ftell(fichero); // Tamaño en bytes
	printf("\nescribir: El tamaño del fichero es: %ld\n",nbytes);
	char entrada[nbytes];
	fseek(fichero,0,0);
	fscanf(fichero,"%s",entrada);
	fclose(fichero);
	
	//Montamos el dispositivo.
	printf("\nescribir: Montando el dispositivo...\n");	
	bmount(argv[1]);//nombre_fichero
	printf("\nescribir: El dispositivo se ha montado con éxito.\n");
	
	//Si el inodo se pasa como argumento
	if(argc == 4){
		ninodo = atoi(argv[3]);
	}else{
		//Reservamos el inodo.
		ninodo = reservar_inodo('f',6);
	}

	inodo = leer_inodo(ninodo);
	
	//IMPRIMIR INODO 
	printf("\nNº INODO %i:\n",ninodo);
	printf("Tipo: %c\n",inodo.tipo);
	printf("Permisos: %i\n",inodo.permisos);
	printf("Nº enlaces: %i\n",inodo.nlinks);
	printf("Bytes lógicos: %i\n",inodo.tamEnBytesLog);
	printf("Bloques ocupados: %i\n",inodo.numBloquesOcupados);
	//ESCRITURA 
	if(mi_write_f(ninodo,entrada,offset,nbytes)!=nbytes){
		printf("\nescribir: ERROR, no se ha escrito en el fichero correctamente.\n");
		return -1;
	}
	//LECTURA 
	printf("\nescribir:Se ha leído lo siguiente con el offset %ld:\n",offset);
	if(mi_read_f(ninodo,entrada,offset,nbytes)!=nbytes){
		printf("\nescribir: ERROR, no se ha leído en el fichero correctamente.\n");
		return -1;
	}
	write(1,entrada,nbytes);
	printf("\n\nInodo Actualizado:\n");
	inodo = leer_inodo(ninodo);
	//IMPRIMIR INODO
	printf("\nNº INODO %i:\n",ninodo);
	printf("Tipo: %c\n",inodo.tipo);
	printf("Permisos: %i\n",inodo.permisos);
	printf("Nº enlaces: %i\n",inodo.nlinks);
	printf("Bytes lógicos: %i\n",inodo.tamEnBytesLog);
	printf("Bloques ocupados: %i\n",inodo.numBloquesOcupados);
	
	//Desmontamos el dispositivo.
	printf("\nescribir: Desmontando el dispositivo...\n\n");
	bumount();
	printf("\nescribir: Dispositivo desmontado con éxito.\n");
	
	return 0;
}
コード例 #3
0
ファイル: verificacion.c プロジェクト: andreucv/CFileSystem
int main(int argc, char **argv){

	if(argc != 2){
		printf("verificacion.c, 6:Error en els arguments.\n");
		printf("L'ús del programa és:\n \t.");
		printf("/verificacion [nom_del_dispositiu] \n");
		exit(0);
	}

	if(bmount(argv[1]) == -1){
		printf("verificacion.c, 13: Error en obrir el dispositiu: %s.\n", argv[1]);
		return -1;
	}

	unsigned char dirSim[60];
	sprintf(dirSim, "/");
	
	struct Entrada en;
	mi_read(dirSim, &en, 0, sizeof(struct Entrada));
	sprintf(dirSim, "/%s", en.nombre);
	
	struct STAT stat;
	mi_stat(dirSim, &stat);
	
	if((stat.tamBytesLogicos / (sizeof(struct Entrada))) != MAX_PROCESOS){
		printf("verificacion.c, 28: Error en el nombre de processos.\n");
		return -1;
	}

	int i = 0, j = 0;
	int ninodo = en.ninodo;
	struct Entrada enAux;
	struct STAT statAux;
	struct Registro registros[BLOCKSIZE/sizeof(struct Registro)];

	unsigned char blanco[sizeof(struct Registro)];
	memset(blanco, 0, sizeof(struct Registro));
	
	int BloquesInicial = 0, BloquesFinal;
	FILE *f = fopen("informe.txt", "w");
	
	for(i = 0; i < MAX_PROCESOS; i++){		
		mi_read_f(ninodo, &en, i*(sizeof(struct Entrada)), sizeof(struct Entrada));

		mi_read_f(en.ninodo, &enAux, 0, sizeof(struct Entrada));

		mi_stat_f(enAux.ninodo, &statAux);

		BloquesFinal = statAux.tamBytesLogicos / BLOCKSIZE;
		if((statAux.tamBytesLogicos % BLOCKSIZE) != 0) BloquesFinal++;

		struct Registro regMayor, regMenor, regPrincipio, regFinal;
		regMenor.posFich = UINT_MAX;
		regMayor.posFich = 0;
		regPrincipio.time = time(NULL);
		regFinal.time = time(NULL);
		
		char *p_pid;
		p_pid = strchr(en.nombre, '_');
		int pidAux = atoi(p_pid+1);
		int validados = 0;
		
		for(BloquesInicial = 0; BloquesInicial < BloquesFinal; BloquesInicial++){
			mi_read_f(enAux.ninodo, registros, BloquesInicial*BLOCKSIZE, BLOCKSIZE);
	
			for(j = 0; j < (BLOCKSIZE / sizeof(struct Registro)); j++){
				if(memcmp(&registros[j], blanco, sizeof(struct Registro)) != 0){
					if(pidAux == registros[j].pid){
						validados++;
						if(registros[j].posFich < regMenor.posFich){
							memcpy(&regMenor, &registros[j], sizeof(struct Registro));
						}
						if(registros[j].posFich > regMayor.posFich){
							memcpy(&regMayor, &registros[j], sizeof(struct Registro));
						}
						if(registros[j].time < regPrincipio.time){
							memcpy(&regPrincipio, &registros[j], sizeof(struct Registro));
						}
						if(registros[j].time > regFinal.time){
							memcpy(&regFinal, &registros[j], sizeof(struct Registro));
						}
					}
				}
			}
		}
		
		char tiempo[60];
		char cadena[500];
		struct tm *tm;
		sprintf(cadena, "Verificació del procés %i:\n", pidAux);
		fputs(cadena, f);
		printf("%s", cadena);
		sprintf(cadena, "\tNombre de Validacions: %i.\n", validados);
		fputs(cadena, f);
		printf("%s", cadena);
		sprintf(cadena, "\tInformació dels Registres:\n");
		fputs(cadena, f);
		printf("%s", cadena);
		sprintf(cadena, "\t\tPosició menor = %i.\n", regMenor.posFich);
		fputs(cadena, f);
		printf("%s", cadena);
		sprintf(cadena, "\t\tPosició major = %i.\n", regMayor.posFich);
		fputs(cadena, f);
		printf("%s", cadena);
		tm = localtime(&regPrincipio.time);
		sprintf(tiempo, "%d-%02d-%02d %02d:%02d:%02d",
                    tm->tm_year + 1900,
                    tm->tm_mon + 1,
                    tm->tm_mday,
                    tm->tm_hour,
                    tm->tm_min,
                    tm->tm_sec);
		sprintf(cadena, "\t\tTemps primer = %s\n", tiempo);
		fputs(cadena, f);
		printf("%s", cadena);
		tm = localtime(&regFinal.time);
		sprintf(tiempo, "%d-%02d-%02d %02d:%02d:%02d",
                    tm->tm_year + 1900,
                    tm->tm_mon + 1,
                    tm->tm_mday,
                    tm->tm_hour,
                    tm->tm_min,
                    tm->tm_sec);
		sprintf(cadena, "\t\tTemps darrer = %s\n", tiempo);
		fputs(cadena, f);
		printf("%s", cadena);
	}
	fclose(f);
}