next up previous
Next: Chaves de acesso: Função Up: Descrição de algumas primitivas Previous: Exemplo 1: Redirecionamento da

Exemplo 2: Cópia de um arquivo

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



Celso Alberto Saibel Santos 2000-11-14