Tranky, credo che il forum sia apposta per chiarire... anche se poi si postano sopprattutto soluzioni ai compiti scolastici... 
tornando al discorso f-read/write:
Prima cosa ho dimenticato di dirti che se vuoi utilizzare veramente la modalità binaria devi indicarlo quando apri il file aggiungendo il carattere 'b' nelle opzioni di fopen:
codice:
in = fopen(PATH, "rb");
out = fopen(PATH, "wb");
Riguardo alla modalità di lettura o scrittura... certo se scrivi in binario puoi leggere in binario
ad esempio supponi di aver scritto su un file un centinaio di strutture con istruzioni come:
codice:
fwrite(pointer_to_my_type_object, sizeof(mytype), 1, 1);
Nell'apertura puoi fare:
codice:
mytype *vec;
struct stat st;
...
binary_input_sream = fopen(PATH, "rb");
...
stat(&st, "FILENAME");
vec = (mytype*)malloc(st.st_size); /* st.st_size indica la dimensione del file */
...
fread(vec, st.st_size, 1, binary_imput_stream); /* legge un blocco grande quanto il file 1 sola volta */
...
Cosi in un colpo solo hai letto tutto il file in memoria e hai un vettore riempito. Forte eh? 
PS: Ricorda che se le struttura ha dei puntatori come membri questo non lo puoi fare perchè un puntatore
contiene un indirizzo quindi fwrite scrive quell'indirizzo nel file ma poi quando lo rileggi dentro
alla struttura quell'indirizzo non è piu valido.