Scrittura su file

Per scrivere su un file, occorre specificare che il file va aperto per scrivere. In altre parole, dobbiamo dire che vogliamo scrivere sul file già nel momento in cui il file viene aperto: non è possibile aprire il file in lettura e poi ``cambiare idea'' e scrivere sul file.

Per aprire un file in scrittura, si usa sempre la funzione fopen, passando come primo argomento il nome del file da aprire, e come secondo argomento la stringa "w". Per esempio, per dire che vogliamo scrivere sul file scrivi.txt, usiamo la istruzione:

  fd=fopen("scrivi.txt", "w");

Come nel caso della lettura, occorre memorizzare il valore di ritorno della funzione (il descrittore di file), perchè è quello che serve per identificare il file nelle successivo operazioni (scrittura e chiusura).

La funzione che si usa per scrivere su un file è fprintf. Il suo primo argomento è il descrittore del file su cui si vuole scrivere. I successivi argomenti sono gli stessi della printf. L'unica differenza è che la funzione fprintf scrive sul file invece che sullo schermo. Quindi, dato che per scrivere un numero intero su schermo si usa la istruzione:

  printf("%d\n", x);

allora per scrivere un intero su un file il cui descrittore è fd facciamo:

  fprintf(fd, "%d\n", x);

Il seguente programma scrivi.c apre il file di nome scrivi.txt, ci scrive un intero, e lo chiude.

/*
  Scrive un intero su file
*/

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

int main() {
  FILE *fd;
  int x=-32;

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


		/* scrive il numero */
  fprintf(fd, "%d\n", x);


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

  return 0;
}

La funzione fopen si comporta in modo diverso a seconda se il file che si sta aprendo in scrittura esiste oppure no.

il file non esiste
è chiaro che non si deve generare nessun errore (altrimenti non si potrebbero mai creare nuovi file); il file viene creato di dimensione zero (la dimensione aumenta quando si fanno le successive operazioni di scrittura);
il file esiste già
in questo caso il contenuto del file viene azzerato; in altre parole, è come se il file venisse cancellato e ricreato vuoto.

In entrambi i casi, se si apre un file in scrittura e poi lo si chiude subito dopo, quello che si ottiene è un file di dimensione zero.