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(); }
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; }
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(®istros[j], blanco, sizeof(struct Registro)) != 0){ if(pidAux == registros[j].pid){ validados++; if(registros[j].posFich < regMenor.posFich){ memcpy(®Menor, ®istros[j], sizeof(struct Registro)); } if(registros[j].posFich > regMayor.posFich){ memcpy(®Mayor, ®istros[j], sizeof(struct Registro)); } if(registros[j].time < regPrincipio.time){ memcpy(®Principio, ®istros[j], sizeof(struct Registro)); } if(registros[j].time > regFinal.time){ memcpy(®Final, ®istros[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(®Principio.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(®Final.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); }