Test Foro de elhacker.net SMF 2.1

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.

void write_pipe(int fd, void *buf, char *pipe)
{
    int flag = 0, bytes;
    do
    {
        fd = open(pipe, O_WRONLY);
        if (fd == -1)
        {
            perror("pipe");
            printf(" Se volvera a intentar despues\n");
            sleep(5);
        }
        else
            flag = 1;
    } while (flag == 0);
    bytes = write(fd, buf, sizeof(buf));
    printf("Sent it:%d\n", bytes);
    close(fd);
}
void read_pipe(int fd, void *buf, char *pipe)
{
    int flag = 0, bytes;
    do
    {
        fd = open(pipe, O_RDONLY);
        if (fd == -1)
        {
            perror("pipe");
            printf(" Se volvera a intentar despues\n");
            sleep(5);
        }
        else
            flag = 1;
    } while (flag == 0);
    bytes = read(fd, buf, sizeof(buf));
    printf("Received it:%d\n", bytes);
    close(fd);
}
>

Y asi llamo la función en el main

struct data dt;
write_pipe(fd[0],(struct data*)&dt, argv[8]);


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
Cita de: 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.

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.

void read_pipe(int fd, void *buf, size_t size, char *pipe);
/*
   Reserva msm;
    read_pipe(fd[0], (Reserva *)&msm, sizeof(msm), pipe);
*/
Título: Re: Genericos en c pipes (void*)
Publicado por: Eternal Idol en 10 Abril 2021, 21:19 PM
De nadas  ::)