
camiloavancini
(usa Outra)
Enviado em 25/09/2010 - 19:10h
Estou implementando um programa de “ping-pong” onde existem dois processos que ficam se
comunicando de forma periódica. Para comunicação, os processos empregam o mecanismo de sinais. Um processo exibe no
console “<pid>: ping” ao receber um sinal, responde (enviando um sinal), e o outro processo que
recebe a resposta, exibe “<pid>: pong”. Deve haver um atraso (parametrizável) entre cada par
ping-pong. tai meu codigo ele ta imprimindo duas vezes o ping por causa do fork que fiz se alguem tiver alguma ideia prta me ajudar.
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <sys/types.h>
#include <stdlib.h>
int PID1, PID2;
void imprimePing(int sinal)
{
printf("%d : PING\n", PID1);
}
void imprimePong(int sinal)
{
printf("%d : PONG\n", PID2);
}
main()
{
signal(SIGUSR1,imprimePing);
signal(SIGUSR2,imprimePong);
PID1 = getpid();
PID2 = fork();
while(1)
{
/*if(kill(PID1,SIGINT) > 0)
{
printf("Processo %d morrendo", PID1);
}
else if (kill(PID2,SIGINT) > 0)
{
printf("Processo %d morrendo", PID2);
}*/
kill(PID2,SIGUSR1);
kill(PID1,SIGUSR2);
sleep(3);
}
}