Alguien vé el error...

Iniciado por Traxcer, 19 Agosto 2013, 13:17 PM

0 Miembros y 1 Visitante están viendo este tema.

Traxcer

He compilado este código que implementa una función para copiar archivos, pero no me funcióna y ya me estoy volviendo loco y no le veo el fallo. A ver si me podeís echar un cable alguno.

Un saludo.

CODIGO::

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>

int copiaf(char *f1, char* f2){
  int fd_leer;
  int fd_escribir;
  ssize_t leido;
  ssize_t escrito;
  char bufi[20];

  if(fd_leer = open(f1,O_RDONLY)< 0){
    perror ("Error en Lectura:");
    exit (-1);
  }
  if(fd_escribir = open(f2,O_WRONLY|O_TRUNC|O_CREAT,666) < 0){
    perror("Error en Escritura:");
    exit (-1);
  }
  ////////////
  // LECTURA y ESCRITURA
  ////////////

  while (leido = read(fd_leer,bufi,sizeof bufi)>0)
  {
  printf ("Leidos: %d bytes\n",leido);
  escrito = write(fd_escribir,bufi,sizeof bufi);
  }
  if (leido == 0) {
    printf("Fin del Fichero");
    close(fd_leer);
    close(fd_escribir);
    exit (-1);
  }
  else if (leido < 0){
  perror("Lectura:");
  }
}



int main(int argc, char **argv) {
  int resultado;
  if (argc != 3){
    printf ("Usar: %s origen destino\n\n",argv[0]);
    exit (-1);
  }
  if ((resultado= copiaf (argv[1], argv[2]))<0);
    printf ("Error en la copia");
return 0;
}

Alien-Z

Muy sencillo:

La variable leido es de tipo ssize_t e intentas imprimirla como un especificador de formato para enteros:

Código (cpp) [Seleccionar]
printf ("Leidos: %d bytes\n",leido);

Debes utilizar el especificador de formato "%zd":

Código (cpp) [Seleccionar]
printf ("Leidos: %zd bytes\n",leido);

Un saludo.

do-while

Y otra cosa.

Tienes una función que no devuelve ningún valor, a pesar de que indicas que debería devolver un entero...

¡Saludos!
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!