|
|
|
|
Kikoo, c'est encore moi :p
Voilà, toujours avec l'envoi de signaux, je dois créer un genre de "ping pong" en C
En fait, on a un programme père, qui se créer un fils, et joue au ping pong avec lui
Détails du programme :
le père dis au fils de commencer
le fils envoi la balle (affichage de "ping" en fait)
donc le père attends l'envoi du fils, et renvoi à nouveau la balle (affichage de "pong")
le programme s'arrete après 10 échanges.
Pourriez vous m'aider sur les envois de signaux, si ce n'est pas trop demandé?
Merci bocoup d'avance!
Plus t'avance moins vite, moins t'avance plus viteConfiguration: Linux
Firefox 1.0.7
Pour moi ça se fait à base de "fork+pipe" ou de "popen" mais c'est assez lointain.
man popen man pipe man fork Quelques liens intéressants : http://www.gidforums.com/t-3369.html http://web.umr.edu/~ercal/284/PipeExamples/Pipe2.c Bonne chance |
Si tu regardes le deuxième lien (voici la version légèrement corrigée)
#define MSGSIZE 32
char *msg1 = "hello #1";
char *msg2 = "hello #2";
char *msg3 = "hello #3";
int main()
{ char inbuf[MSGSIZE];
int p[2], j, pid;
/* open pipe */
if(pipe(p) == -1)
{ perror("pipe call error");
return 1;
}
switch(pid = fork()){
case -1: perror("error: fork call");
return 2;
case 0: /* if child then write down pipe */
close(p[0]); /* first close the read end of the pipe */
write(p[1], msg1, MSGSIZE);
write(p[1], msg2, MSGSIZE);
write(p[1], msg3, MSGSIZE);
break;
default: /* parent reads pipe */
close(p[1]); /* first close the write end of the pipe */
for(j=0; j<3; j++)
{ read(p[0], inbuf, MSGSIZE);
printf("Parent: %s\n", inbuf);
}
wait(NULL);
}
return 0;
}
... tu as déjà le premier ping-pong (communication du fils vers le père). Il faut juste que le père communique au fils via un autre pipe qu'il a reçu le message. Le fils doit simplement attendre cet acquittement avant d'émettre un nouveau message. Bonne chance |
Merci mamimando!! J'ai un dernier truc à savoir, en fait j'ai le corps du programme, et je dois absolument utiliser l'envoi de signaux...
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include<signal.h>
void execfils(int n){
printf("ping!!!\n");
}
int main(int argc, char**argv) {
//déclaration des variables
pid_t pid,fils;
int balle=0,pg=0,balle2=0,i=2;
printf("Allez mon fils commence!!\n");
getchar();
//création du fils joueur
pid = fork();
//execution du fils joueur
if (pid == 0) {
while(balle2<9){
//on récéptionne le signal du père
//on réarme le signal
//on envoie le signal au père
balle++;
}
}
//execution du pere joueur
else if (pid != -1) {
//création du supporter
fils=fork();
if(fils==0){
while(balle<10){
printf("Je suis %d ; Vas-y papa!!\n",getpid());
sleep(2);
}
}
else{
while(balle<10){
//on envoi le signal au fils
//on attends le nouveau signal du fils
//on réarme le signal
balle++;
}
//le père a perdu, il tue ses fils!
if(balle==10){
printf("merdeuh j'ai perdu!!!!\n");
kill(fils,9);
kill(pid,9);
}
}
}
exit(0);
}
maintenant, il faut que que je remplace les commentaires par le code d'envoi et de récéption de signaux..plus que ça!! S'il vous plaiiiiiiiiit!!!!!! Plus t'avance moins vite, moins t'avance plus vite |