Genericos en c pipes (void*)

Iniciado por prosebas, 10 Abril 2021, 18:14 PM

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

prosebas

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]);



Eternal Idol

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.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

prosebas

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);
*/

Eternal Idol

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón