Questo esercizio consiste nel copiare, riga per riga, un file su un altro. Supponiamo che il nome del file di partenza sia copia.txt e il file destinazione si debba chiamare x.
La soluzione è abbastanza ovvia: si aprono i due file (il primo in lettura e il secondo in scrittura). Poi si legge dal primo file una linea per volta, e se questa operazione di lettura ha successo si scrive la linea sul secondo file, altrimenti si esce dal ciclo di lettura.
Il programma copia.c realizza questo algoritmo.
/*
Copia un file riga per riga
*/
#include<stdlib.h>
#include<stdio.h>
int main() {
FILE *in, *out;
char buf[200];
char *res;
/* apre il file da leggere */
in=fopen("copia.txt", "r");
if( in==NULL ) {
perror("Errore in apertura del file da leggere");
exit(1);
}
/* apre il file da scrivere */
out=fopen("x", "w");
if( out==NULL ) {
perror("Errore in apertura del file da scrivere");
exit(1);
}
/* legge e scrive ogni riga */
while(1) {
res=fgets(buf, 200, in);
if( res==NULL )
break;
fputs(buf, out);
}
/* chiude i file */
fclose(in);
fclose(out);
return 0;
}
Per scrivere la linea sul secondo file si è usata la funzione fputs, che scrive una stringa su file. Al suo posto si sarebbe potuta usare la funzione fprintf, facendo fprintf(fd, "%s", buf), e il risultato sarebbe stato identico.