Leer / escribir una estructura en un archivo binario

Estoy ejecutando un progtwig con 3 estructuras y lo que estoy haciendo para leer / escribir en el archivo binario es lo siguiente:

struct Medico { int Id_Doctor; int Estado; char Nombre[60]; char Clave_Acceso[20]; char Especialidad[40]; struct Medico *next; }; typedef struct Medico *Medicazos; typedef struct Medico Meds; Medicazos Nuevo; FILE *Archivaldo; char especialida[40], password[20]; char nombre_doc[60]; int estado_doc, id_doc; Archivaldo=fopen("md.dat", "rb"); fclose(Archivaldo); if((Archivaldo=fopen("md.dat", "rb"))==NULL) { printf("No se pudo abrir el archivo de Medicos\n"); //couldnt open file msg exit(1); } rewind(Archivaldo); while(!feof(Archivaldo)) { if(*Inicio != NULL) //read from file and write in struct { Nuevo = (Medicazos) malloc (sizeof(Meds)); //new=pointer fread(&id_doc, sizeof(int), 1, Archivaldo); fread(nombre_doc, sizeof(char), sizeof(nombre_doc), Archivaldo); fread(password, sizeof(char), 20 , Archivaldo); fread(especialida, sizeof(char), 40, Archivaldo); fread(&estado_doc, sizeof(int), 1, Archivaldo); Nuevo->Id_Doctor=id_doc; ///copies data in structure strcpy(Nuevo -> Nombre , nombre_doc); strcpy(Nuevo -> Clave_Acceso, password); strcpy(Nuevo -> Especialidad, especialida); Nuevo-> Estado = estado_doc; printf("---------------------------------\n"); //display info printf("ID: %d\n", id_doc); printf("\nDoctor: "); puts(nombre_doc); printf("\nPassword: "); puts(password); printf("\nEspecialidad: "); puts(especialida); printf("\nEstado: "); if(estado_doc==1) puts("Activo\n"); else puts("Inactivo\n"); Nuevo-> next = *Inicio; *Inicio = Nuevo; } else { *Inicio = (Medicazos)malloc(sizeof(Meds)); fread(&id_doc, sizeof(int), 1, Archivaldo); fread(nombre_doc, sizeof(char), sizeof(nombre_doc), Archivaldo); fread(password, sizeof(char), 20 , Archivaldo); fread(especialida, sizeof(char), 40, Archivaldo); fread(&estado_doc, sizeof(int), 1, Archivaldo); (*Inicio)->Id_Doctor=id_doc; strcpy((*Inicio) -> Nombre , nombre_doc); strcpy((*Inicio) -> Clave_Acceso, password); strcpy((*Inicio) -> Especialidad, especialida); (*Inicio)-> Estado = estado_doc; printf("--------------------------------\n"); //display info printf("ID: %d\n", id_doc); printf("\nDoctor: "); puts(nombre_doc); printf("\nPassword: "); puts(password); printf("\nEspecialidad: "); puts(especialida); printf("\nEstado: "); if(estado_doc==1) puts("Activo\n"); else puts("Inactivo\n"); (*Inicio) -> next = NULL; } } fclose(Archivaldo); 

¿Hay alguna manera de simplificar esto?

EDITAR : También, cuando bash mostrar los archivos, alguien me mencionó que no debe usar feof mientras lee o escribe. No recuerdo por qué. ¿Qué podría usarse en su lugar?

Supongo que su estructura se ve así:

 struct Medicazos { char Nombre[60]; char Clave_Acceso[20]; char Especialidad[40]; int Id_Doctor; int Estado; } 

Puedes leer / escribir / copiar a este chico como una sola unidad. No es necesario hacer un acceso por etapas hasta que esté listo para usar los valores.

 struct Medicazos m = {"Bob", "Password", "Feet", 123, 456}; FILE* f = fopen(...); fwrite(&m, sizeof(struct Medicazos), 1, f); 

Y lo mismo (pero al revés) para fread .

(Por cierto, tus nombres de variables en mayúscula me están matando).