Ping pong en C
Résolu
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 vite
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 vite
Configuration: Linux Firefox 1.0.7
6 réponses
-
Puisque tu as coché le sujet et résolu, peux tu donner le code final afin d'en faire profiter les personnes qui passeront sur ce post ?
-
Pour moi ça se fait à base de "fork+pipe" ou de "popen" mais c'est assez lointain.
Dans un premier jet tu peux regarder l'aide en tapant dans une console linux ou dans googleman 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...
voici le code:#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!!!!!! -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Oui merci je vais me pencher sur le fork+pipe, je vais voir quelques tutos sur internet, en attendant si quelqu'un peux encore m'aider je ne dis pas non!! ;)
-