Título: Pasar más de un int con una pipe
Publicado por: ithory en 14 Diciembre 2012, 16:06 pm
Hola, ¿es posible pasar más de un int por cada pipe o solo se puede pasar un dato por cada pipe? Yo tengo 2 valores enteros que quiero enviárselos del proceso padre al hijo mediante una pipe. Cuando envío los valores los meto en el vector enviar[2] y cuando los recibo los guardo en recibir[2]. Pero al recibirlo y mostrarlo me muestra unos caracteres raros. #include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <signal.h> #include <stdlib.h> int pidh; int i,j; int B[2][2]; int pipe1[2]; int enviar[2]; int recibir[2]; int salirhijo=0; int salirpadre=0; void leer(){ for(i=0;i<2;i++){ read(pipe1[0],&recibir[i],sizeof(int)); } //recibo los datos en el vector de 2 posiciones recibir[2]. printf("Los datos recibidos por la pipe son: %d y %d", recibir [0], recibir [1]); } int main(){ pipe(pipe1); pidh=fork(); if(pidh == 0){ //hijo signal(SIGUSR1,leer); while(salirhijo == 0){ printf("Hijo esperando...\n"); sleep(1); } }else{ //padre sleep(1); for (i=0;i<3;i++){ for (j=0;j<3;j++){ sleep(1); } } printf("Elemento b11 -> %d\n",B [0][0]); printf("Elemento b32 -> %d\n",B [2][1]); //le voy a enviar 2 elementos al hijo por la pipe, para ello antes los meto en el vector enviar que es de 2 posiciones. enviar[0] = B[0][0]; enviar[1] = B[2][1]; for(i=0;i<2;i++){ write(pipe1[1],&enviar[i],sizeof(int)); kill(pidh,SIGUSR1); sleep(1); } } }
Saludos y gracias!!
Título: Re: Pasar más de un int con una pipe
Publicado por: naderST en 14 Diciembre 2012, 19:49 pm
Puedes pasar n bytes por una tubería. En tu código tienes un error y es que tratas B como una matriz 3x3 cuando esta es 2x2.
Título: Re: Pasar más de un int con una pipe
Publicado por: ithory en 15 Diciembre 2012, 13:23 pm
Ok gracias, era eso que me había hecho un lío con las matrices! Dejo el código corregido. Gracias. #include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <signal.h> #include <stdlib.h> int pidh; int i,j; int B[2][2]; int pipe1[2]; int enviar[2]; int recibir[2]; int salirhijo=0; int salirpadre=0; void leer(){ for(i=0;i<=1;i++){ read(pipe1[0],&recibir[i],sizeof(int)); } //recibo los datos en el vector de 2 posiciones recibir[2]. printf("Los datos recibidos por la pipe son: %d y %d\n", recibir [0], recibir [1]); salirhijo=1; } int main(){ pipe(pipe1); pidh=fork(); if(pidh == 0){ //hijo signal(SIGUSR1,leer); while(salirhijo == 0){ printf("Hijo esperando...\n"); sleep(1); } }else{ //padre sleep(1); for (i=0;i<2;i++){ for (j=0;j<2;j++){ sleep(1); } } enviar[0] = B[0][0]; enviar[1] = B[1][1]; printf("Elemento b11 -> %d\n",enviar [0]); printf("Elemento b22 -> %d\n",enviar [1]); printf("Estos datos son los que voy a pasar por la pipe\n"); //le voy a enviar 2 elementos al hijo por la pipe, para ello antes los meto en el vector enviar que es de 2 posiciones. for(i=0;i<=1;i++){ write(pipe1[1],&enviar[i],sizeof(int)); kill(pidh,SIGUSR1); sleep(1); } } }
|