Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: prosebas en 10 Abril 2021, 18:14 pm



Título: Genericos en c pipes (void*)
Publicado por: prosebas en 10 Abril 2021, 18:14 pm
Buenos dias , soy nuevo en el lenguaje de c y estoy teniendo problemas a la hora de crear un función génerico para escribir o enviar el pipe.La función  funciona perfectamente sin el génerico pero con el genérico me esta pasando basura y me salta un error Segmentation Fault.
Código
  1. void write_pipe(int fd, void *buf, char *pipe)
  2. {
  3.    int flag = 0, bytes;
  4.    do
  5.    {
  6.        fd = open(pipe, O_WRONLY);
  7.        if (fd == -1)
  8.        {
  9.            perror("pipe");
  10.            printf(" Se volvera a intentar despues\n");
  11.            sleep(5);
  12.        }
  13.        else
  14.            flag = 1;
  15.    } while (flag == 0);
  16.    bytes = write(fd, buf, sizeof(buf));
  17.    printf("Sent it:%d\n", bytes);
  18.    close(fd);
  19. }
  20. void read_pipe(int fd, void *buf, char *pipe)
  21. {
  22.    int flag = 0, bytes;
  23.    do
  24.    {
  25.        fd = open(pipe, O_RDONLY);
  26.        if (fd == -1)
  27.        {
  28.            perror("pipe");
  29.            printf(" Se volvera a intentar despues\n");
  30.            sleep(5);
  31.        }
  32.        else
  33.            flag = 1;
  34.    } while (flag == 0);
  35.    bytes = read(fd, buf, sizeof(buf));
  36.    printf("Received it:%d\n", bytes);
  37.    close(fd);
  38. }
  39.  
>

Y asi llamo la función en el main
Código
  1. struct data dt;
  2. write_pipe(fd[0],(struct data*)&dt, argv[8]);
  3.  



Título: Re: Genericos en c pipes (void*)
Publicado por: Eternal Idol en 10 Abril 2021, 19:29 pm
Deberias depurar tu programa, asi sabrias en que linea/instruccion esta fallando exactamente.

Asi leyendo el codigo rapidamente sizeof(buf) no tiene sentido ya que es el tamaño de un puntero y no de la estructura que pasas, lo logico seria que pasaras tambien el tamaño del buffer a las funciones.


Título: Re: Genericos en c pipes (void*)
Publicado por: prosebas en 10 Abril 2021, 21:08 pm
Deberias depurar tu programa, asi sabrias en que linea/instruccion esta fallando exactamente.

Asi leyendo el codigo rapidamente sizeof(buf) no tiene sentido ya que es el tamaño de un puntero y no de la estructura que pasas, lo logico seria que pasaras tambien el tamaño del buffer a las funciones.

Solucionado

Gracias efectivamente ese era el error lo unico que hice fue agregar un parametro para el tamaño y ese lo pasa para el pipe.
Código
  1. void read_pipe(int fd, void *buf, size_t size, char *pipe);
  2. /*
  3.    Reserva msm;
  4.     read_pipe(fd[0], (Reserva *)&msm, sizeof(msm), pipe);
  5. */
  6.  


Título: Re: Genericos en c pipes (void*)
Publicado por: Eternal Idol en 10 Abril 2021, 21:19 pm
De nadas  ::)