/**
 * Autor: Jorge Pereira 
 * Data: Thu Oct  9 22:47:47 BRT 2008
 * Desc: Exemplo de um codigo para copia de arquivos.
 * Arquivo: cp-no-mmap.c
 */
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <err.h>

#define IO_SIZE 4096

int
main(int argc, char *argv[])
{
int32_t fdr, fdw;
ssize_t reads;

/* Como de costume, temos um buffer temporario para auxiliar a copia */
char buf[IO_SIZE];

if(argc < 3)
{
  printf("Usage: %s  \n", argv[0]);
  exit(EXIT_FAILURE);
}

/* Arquivo de origem */
fdr = open(argv[1], O_RDONLY);
if(fdr < 0)
{
  err(1, "Falha ao abrir (%s)", argv[1]);
  exit(EXIT_FAILURE);
}

/* Arquivo de destino */
fdw = open(argv[2], O_CREAT | O_RDWR, 0644);
if(fdw < 0)
{
  err(1, "Falha ao abrir (%s)", argv[2]);
  exit(EXIT_FAILURE);
}

/* Inicio da copia */
while ((reads = read(fdr, buf, sizeof(buf))) > 0)
{
  if(write(fdw, buf, reads) < reads)
  {
    err(1, "Problemas com write()");
    break;
  }
}

/* fechando os descritores */
close(fdr);
close(fdw);

return EXIT_SUCCESS;
}
