Scrivere su un file binario

Per utilizzare un file binario, va per prima cosa aperto. Le funzioni di apertura e chiusura di un file binario sono esattamente le stesse dei file di testo. Del resto, i file binari differiscono da quelli di testo solo per il modo in cui le informazioni sono rappresentate al loro interno.

Per scrivere su un file binario, si deve prima aprire usando la funzione fopen, passando come modo la stringa "w". Per scrivere un dato sul file, si usa la funzione fwrite. Questa funzione ha quattro argomenti: il primo è l'indirizzo del dato da scrivere, il secondo è la sua dimensione, il terzo per il momento vale 1, il quarto è il descrittore di file. Per esempio, se x è una variabile intera, allora la istruzione:

fwrite(&x, sizeof(x), 1, fd);

Scrive il valore della variabile x sul file, in modo binario. Si possono ovviamente scrivere su file i valori di variabili di tipo generico. Si noti che non è possibile scrivere su un file binario un valore costante. In altre parole, per scrivere il valore 12 in un file binario occorre prima memorizzarlo in una variabile, e poi scriverlo con l'istruzione di sopra.

Come per i file di testo, quando si scrive più volte su un file binario, i dati vengono scritti l'uno dietro l'altro. Per esempio, il programma riportato sotto scrivi.c scrive su file un numero in formato binario, poi il numero superiore di uno e il numero inferiore di uno.

/*
  Scrive un intero su file binario, e poi
il numero superiore e inferiore.
*/

#include<stdlib.h>
#include<stdio.h>

int main() {
  FILE *fd;
  int x=12;

			/* apre il file */
  fd=fopen("test.dat", "w");
  if( fd==NULL ) {
    perror("Errore in apertura del file");
    exit(1);
  }


			/* scrive il numero */
  fwrite(&x, sizeof(int), 1, fd);


			/* incrementa e scrive */
  x++;
  fwrite(&x, sizeof(int), 1, fd);



			/* decrementa e scrive */
  x-=2;
  fwrite(&x, sizeof(int), 1, fd);


			/* chiude il file */
  fclose(fd);

  return 0;
}

Confrontiamo ora il contenuto dei file, nel caso in cui questi tre numeri 12, 13, 11 sono scritti usando fprintf e nel caso in cui vengono scritti usando fwrite. Le figure qui sotto indicano quale è il contenuto del file nel caso di scrittura binaria (a sinistra) e di testo (a destra).

Quando si scrive un numero intero in formato binario, vengono scritti i byte che lo rappresentano. Nel nostro caso, assumiamo che bastano quattro byte per rappresentare un intero. Da notare che si scrivono comunque quattro byte, independentemente dal numero di cifre del numero.

Quando si scrive il primo numero in un file di testo, vengono scritti i caratteri che corrispondono alle cifre del numero. Nel nostro caso, vengono scritti i due caratteri '1' e '2'. Per separare due interi su file di testo si scrive di solito uno spazio fra loro (oppure un carattere di ritorno a capo).

Viene fatto lo stesso per il secondo numero, e questi sono altri quattro byte che vengono scritti sul file.

Il secondo numero che viene scritto su file è 13, che occupa ancora due caratteri del file, più la spaziatura.

Alla fine, il file è composto da dodici byte. Ogni gruppo di quattro byte è ha i valori che stanno in memoria quando una variabile ha il valore del numero.

Il file è composto da nove byte. Ogni byte rappresenta il valore di un carattere che si usa per scrivere una cifra del numero.