• Domingo 6 de Octubre de 2024, 07:38

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Temas - orilla

Páginas: [1]
1
C/C++ / Pipes entre procesos
« en: Domingo 19 de Octubre de 2008, 18:15 »
Bien, tengo que crear un proceso padre con dos hijos, luego conectarlos mediante un pipe, y entonces mandar un valor aleatorio (rand) desde el padre al hijo.Este numero aleatorio, sera las veces que tendre que imprimir el pid del padre y el hijo. La creación del padre y los hijos creo que lo tengo bien, el problema es cuando le paso los parametros al write y al read que nose si lo hago bien, ademas, me da un error con el strlen. Os dejo el codigo y haber si me podeis indicar si lo hago bien o que pasa. Lo del readbuffer lo puse porque lo vi en un programa, pero alli se pasaba un string en vez de un int :S
Muchas gracias

#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>

int main(int argc, char *argv[])
{
pid_t pid1, pid2;
int status1, status2, nbytes;
int p1[2], p2[2];
int buffer;
char readbuffer[80];



if(pipe(p1) < 0)
{
perror( "Errorn");
}
printf("Soy el padre %dn", getpid());
pid1=fork();
if ( pid1<0)
{
perror("Se ha producido un error n");
}
if ( pid1 == 0 )
{ /* hijo */
close(p1[1]);
//0 = read
nbytes = read(p1[0], readbuffer, sizeof(readbuffer));
printf("Numero recibido: %d", readbuffer);
while (buffer>0)
{
printf("Soy el primer hijo %d, n", getpid());
printf(" Soy el padre %d,n",getppid());
alarm(5);
buffer=buffer -1;
}

}
else
{ /* padre */
pid2=fork();
if(pid2<0){
perror("Se ha producido un error n");

}
if ( pid2 == 0 )
{ /* segundo hijo */
close(p2[1];
while (buffer>0)
{
printf("Soy el segundo hijo %d, n", getpid());
printf(" Soy el padre %d,n",getppid());
alarm(5);
buffer=buffer -1;
}

}
else
{ /* padre */
buffer=rand();
close(p1[0]);
close([p2[0]);
write(p1[1], buffer, (strlen(buffer)+1));
write(p2[1], buffer, (strlen(buffer)+1));
/* Esperamos al primer hijo */
waitpid(pid1, &status1, 0);
/* Esperamos al segundo hijo */
waitpid(pid2, &status2, 0);
printf("Soy el padre %dn", getpid());
}
}

return 0;
}

Páginas: [1]