/* Scrittura e lettura di file binari (fwrite e fread) */ #include #include #include #define LUN 50 #define N_STUD 2 typedef struct stud{ char nome[LUN+1]; unsigned int matricola; float media; }stud_t; int main() { FILE *fp; stud_t studente[N_STUD]; int i; char riga[LUN+1]; unsigned int n_stud; strcpy(studente[0].nome, "Stefano"); studente[0].matricola = 120000; studente[0].media = 25.5; strcpy(studente[1].nome, "Giulia"); studente[1].matricola = 120001; studente[1].media = 28.5; fp = fopen("out.bin", "w"); /* Apertura file in scrittura */ if (fp == NULL){ printf("Errore: impossibile aprire il file out.bin\n"); exit(1); } /* Scrittura del file */ /* NOTA 2: un file binario non e' detto che sia sempre leggibile in modo corretto su una calcolatore differente da quello su cui e' stato generato, perche' ad esempio i numeri interi potrebbero essere codificati su un numero diverso di byte */ /* Scrittura in binario di tutti i record */ fwrite(studente, sizeof(stud_t), N_STUD, fp); /* DIMENSIONE DEL FILE GENERATO La dimensione del file generato sara': n_stud*sizeof(stud_t) nel caso del calcolatore su cui e' stato testato il programma: 2*60 = 120 byte */ fclose(fp); /* Chiusura del file */ fp = fopen("out.bin", "r"); /* Apertura file in lettura */ if (fp == NULL){ printf("Errore: impossibile aprire il file out.bin\n"); exit(1); } /* Lettura del file */ n_stud = 0; while( fread(&studente[n_stud], sizeof(stud_t), 1, fp) == 1 ) { n_stud++; } fclose(fp); /* Chiusura del file */ /* Stampa dei record letti */ for (i=0; i