O programa test_copy a seguir copia um arquivo para outro. Ele é semelhante ao comando shell cp.
/* arquivo test_copy.c */ #include <errno.h> #include <sys/types.h> #include <fcntl.h> #include <unistd.h> #include <stdlib.h> #include <stdio.h> #define TAILLEBUF 512 void copia_fic(src,dest) /* copia um arquivo */ char *src, *dest ; { int srcfd,destfd ; int nlect, necrit, n ; char buf[TAILLEBUF] ; if ((srcfd = open(src,O_RDONLY)) == -1){ perror("Error: abertura do arquivo fonte") ; exit(1) ; } if ((destfd = creat(dest,0666)) == -1){ perror("Error: Criacao do arquivo desino"); exit(1) ; } write(1,"12332423",8); while ((nlect = read(srcfd,buf,sizeof(buf))) != 0){ if (nlect == -1){ perror("Error read()") ; exit(1) ; } necrit = 0 ; do { if ((n = write(destfd,&buf[necrit],nlect-necrit)) == -1) { perror("Error write()") ; exit(1) ; } necrit += n ; } while (necrit < nlect) ; } if (close(srcfd) == -1 || close(destfd) == -1){ perror("Error close()") ; exit(1) ; } } int main(argc,argv) int argc ; char *argv[] ; { if (argc != 3) { printf("Uso: copia_fic arquivo1 arquivo2\n") ; exit(1) ; } printf("Estou copiando ...\n") ; copia_fic(argv[1],argv[2]) ; printf("\nAcabei!\n") ; exit(0); }
Resultado da execução:
euler:~/> test_copy fonte destino Estou copiando ... 12332423 Acabei! euler:~/> cmp fonte destino euler:~/>