Questo esercizio consiste nella copiatura di un file di testo in un file di altro nome. Il nome del vecchio file, e del nuovo, devono essere passati come argomenti al programma.
Il programma finale copia.c è riportato qui sotto. Dopo aver controllato che al programma siano stati effettivamente passati due argomenti vengono aperti i cui nomi sono il primo e il secondo argomento che il programma ha ricevuto.
Un particolarità di questo programma è che il file da scrivere viene prima aperto in lettura. Se il file già esiste questa apertura non genera errori. In questo modo, è possibile verificare la esistenza del file prima di scrivere: se il risultato della fopen è diverso da NULL allora il file esiste già, per cui si può terminare il programma senza cancellare il contenuto del vecchio file.
/* Copia un file: sorgente e destinazione sono passati come argomenti. */ #include<stdlib.h> #include<stdio.h> int main(int argn, char *argv[]) { char buf[200]; FILE *in, *out; int res; /* controllo numero di argomenti */ if( argn-1<2 ) { printf("Mancano gli argomenti\n"); exit(1); } /* apre il file da leggere */ in=fopen(argv[1], "r"); if( in==NULL ) { perror("Errore in apertura del file da leggere"); exit(1); } /* controlla se il file da scrivere esiste */ out=fopen(argv[2], "r"); if( out!=NULL ) { printf("Il file da scrivere esiste gia'\n"); exit(1); } /* nota: se out==NULL allora non si *deve* fare fclose */ /* apre il file da scrivere */ out=fopen(argv[2], "w"); if( out==NULL ) { perror("Errore in apertura del file da scrivere"); exit(1); } /* legge e scrive ogni riga */ while(1) { fgets(buf, 200, in); if( feof(in) ) break; fputs(buf, out); } /* chiude i file */ fclose(in); fclose(out); return 0; }