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:~/>