Questo è un esempio banale che mostra come realizzare un applicazione UNIX in C che copia da un file sorgente a un file di destinazione.
Dopo aver compilato il programma:
gcc copyfile.c -o copyfile
L’applicazione copyfile può essere lanciata da terminale con:
./copyfile nomeFileSorgente.txt nomeFileDiDestinazione.txt
Ecco il codice sorgente di copyfile.c:
#include <sys/types.h> #include <fcntl.h> #include <stdlib.h> #include <unistd.h> #define BUFF_SIZE 4096 // dimensione del buffer #define OUTPUT_MODE 0700 // bit di protezione per file di output int main(int argc, char *argv[]) // argc è il numero di parametri presenti nella riga di comando che invoca il programma // argv è un array di puntatori ai parametri { int in_fd, out_fd; // descrittori dei file int rd_count, wt_count; // contatori dei byte restituiti dalle chiamate read e write char buffer[BUFF_SIZE]; if (argc != 3) exit(1); // controlla il numero di parametri nella riga di comando in_fd = open(argv[1], O_RDONLY); // apre il file sorgente if (in_fd < 0) exit(2); // in caso di errore di apertura il programma termina out_fd = creat(argv[2], OUTPUT_MODE); // crea il file di destinazione if (out_fd < 0) exit(3); // in caso di errore nella creazione del file il programma termina while (1) // condizione sempre vera { rd_count = read(in_fd, buffer, BUFF_SIZE); // legge un blocco di dati if (rd_count <= 0) break; // in caso di errore o se arriva alla fine del file il programma termina wt_count = write(out_fd, buffer, rd_count); // scrive i dati if (wt_count <= 0) exit(4); // in caso di errore nella scrittura dei file il programma termina } close(in_fd); // chiude il file sorgente close(out_fd); // chiude il file di destinazione if (rd_count == 0) exit(0); // esce senza segnalare errori else exit(3); // esce con un errore nell'ultima lettura }