La funzione fwrite in C permette di scrivere su un file un blocco di dati di qualsiasi tipo, precedentemente aperto con la funzione fopen. La funzione fwrite consente quindi di scrivere i dati di un file binario. Per la scrittura a blocchi è necessario che il file sia stato aperto in modalità binaria (b).

La sintassi della funzione fwrite è dunque la seguente:

size_t fwrite(void *punt, size_t dim, size_t num, FILE *fp)

Punt rappresenta l’indirizzo della locazione di partenza su cui scrivere i dati, dim rappresenta la dimensione in byte del singolo dato e num rappresenta il numero degli elementi da scrivere nello stream. FILE *fp è il puntatore al file restituito dalla funzione fopen, così come nelle altre funzioni che abbiamo studiato finora.

Il valore di ritorno di fwrite indica il numero di elementi effettivamente memorizzati sul file. Nel caso in cui il valore di ritorno assume un valore negativo allora vuol dire che è stato commesso qualche errore. Un errore può essere ad esempio la non apertura di un file.

Se punt rappresenta un vettore, allora in esso verranno trasferiti i dati che devono essere memorizzati nel file fp.


Esempio di utilizzo di fwrite in C

Realizziamo quindi un programma in linguaggio C che acquisisce da tastiera una stringa e la memorizza all’interno di un file di nome nomi.txt.

Apriamo, al solito, il file con la funzione fopen per renderlo disponibile per la scrittura e controlliamo se il puntatore restituisce il valore NULL. In caso positivo restituiamo un messaggio di errore e usciamo dal programma, altrimenti continuiamo nel nostro programma.

Quindi utilizziamo fwrite(buffer, 1, num, fp);

Dove, buffer indica dove sono trasferite le informazioni da memorizzare nel file, 1 indica il numero di elementi del vettore, num rappresenta invece la dimensione in byte di un elemento del vettore ed fp è il file su cui scrivere.

Ecco quindi il listato completo:

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

#define N 100

int main()
{
   	FILE *fp;
   	char buffer[N];
   	int num;
   	   	
   	printf("Inserisci un nome: ");
        scanf("%s",buffer);
    
        num=strlen(buffer);

	if((fp=fopen("nomi.txt", "wb"))==NULL) {
		printf("Errore nell'apertura del file");
		exit(1);
	}
   	
   	fwrite(buffer, 1, num, fp);                        
   	fclose(fp); 
	     
   	return 0;
}


Chiaramente questo è un semplice esempio d’uso della funzione fwrite in C, più avanti proporrò tante altre esercitazioni.

Alcuni link utili

Indice argomenti linguaggio C

La funzione fopen

La funzione fclose

Funzione fprintf

Funzione fscanf

Allocazione dinamica della memoria con malloc

Array multidimensionali

Merge sort in C

Insertion Sort in C