Se usi una lista puoi fare in questo modo
esempio di lista
struct database{
struct database *next;//Puntatore al nodo successivo
char matricola[20];
char crediti[20];
char esame[10];
}dbTesta, *dbPuntatore;
e quindi nel main fai:
FILE *file;
/*a+ apre il file in scrittura in aggiunta e in lettura, creandolo se necessario, o aggiungendovi dati a partire dalla fine, e di conseguenza posizionandosi alla fine dello stesso*/
file = fopen("./matricole", "a+");
//Se il file è vuoto
if(!file){
dbTesta.next = NULL;
}else{
/*Se il file non è vuoto prende il db e lo copia in una lista di Record*/
struct database db;
while(fread(&db, sizeof(struct database), 1, file)){
insert(&db);
}
db.next = NULL;
dbPuntatore = &dbTesta;
}
fclose(file);
In maniera tale che quando riapri il programma ti rimette l'intera lista che contiene il file sul tuo database dinamico
per inserire invece dalla lista al file fai:
fwrite(dbPuntatore, sizeof(struct database), 1, file);