Apertura e chiusura di un file

I dati memorizzati su disco sono divisi in file. Ogni file è un insieme di dati, ed è caratterizzato da un nome. Un nome di file è semplicemente una stringa.

Un programma C può leggere i dati memorizzati in un file. Serve naturalmente sapere il nome del file che si vuole leggere. La prima cosa da fare, quando si vuole leggere un file, è quello di dire il nome del file da leggere. Questo viene fatto con la funzione fopen. Questa funzione ha due parametri: il primo è il nome del file che si vuole leggere (i nomi di file sono stringhe, ossia vettori di caratteri). Il secondo argomento è una stringa che indica il modo in cui si vuole accedere al file (vedi più avanti); per leggere il file, questa stringa deve valere "r", ossia deve essere la stringa composta dal solo carattere r, più il terminatore di stringa. Il prototipo della funzione fopen è questo:

FILE *fopen(char *nome, char *modo);

La chiamata alla funzione fopen viene detta apertura del file. Il valore che viene ritornato da questa funzione è di tipo FILE *, e viene detto descrittore di file. Il descrittore di file è un valore che viene usato dalle successive funzioni di accesso al file, per indicare di quale file si sta parlando.

Per dire che abbiamo finito di leggere il file, e non ci occorre più, usiamo la funzione fclose, che chiude il file. Questa funzione prende come argomento il descrittore del file che si vuole chiudere, ossia valore che è stato ritornato dalla fopen.

Il programma aprichiudi.c apre un file, e lo chiude immediatamente dopo. Non è evidentemente di molta utilità: serve solo a far vedere come si apre e chiude un file.

/*
  Apre un file e poi lo chiude.
*/

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

int main() {
  FILE *fd;

		/* apre il file */
  fd=fopen("test.txt", "r");

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

  return 0;
}

Questo è il primo uso di un descrittore di file: dal momento che può aprire più file (questo avviene se serve leggere dati da più di un file), quando uno di questi non serve più, occorre chiuderlo dicendo però quale dei file va chiuso. Questo concetto verrà chiarito più avanti.

Nota: le variabili di tipo FILE * sono puntatori. Tuttavia, non è necessario creare una zona di memoria con malloc: questo viene fatto dalla funzione fopen.