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;
}