Per quanto riguarda all'affermazione è una procedura che ritorna un valore
e bene sapere che la distinzione tra funzione e procedura è che la prima ritorna un
valore la seconda nessuno quindi avrà tipo di ritorno Void ,quindi se tipo di ritorno non è void
è una funzione questo indipendentemente dal
codice contenuto ("potrebbero tutte e due stampare "ciao mondo!" e la funzione ritornare
ad esempio un intero per scrittura avvenuta e la procedura niente")


Il tuo codice è complesso , ma volevo chiederti se hai pensato alle funzioni fwrite() e fread()
per scrivere strutture su un file binario la cosa è semplice se si sa la dimensione in byte della
strutta .Comunque sarebbe bene che tutte le strutture scritte nel file abbiano la stessa dimensione ,questo per facilitarne la lettura .
un piccolo esempio con strutture non allocate dinamicamente:


codice:
typedef struct
{
   char nome[20];
   int a;

}nuovo_tipo;


nuovo_tipo s;
strcpy(s.nome,"testo");
s.a=23;
FILE *f;
f=fopen("prova.txt","wb");
if(f==NULL)
          perror("errore");
fwrite(&s,sizeof(s),1,f);
fclose(f);