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]);
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.
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);
*/
De nadas ::)