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.