Ping pong en C

Résolu
blackdam Messages postés 332 Statut Membre -  
mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   -
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
Configuration: Linux
Firefox 1.0.7

6 réponses

  1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    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 ?
    2
  2. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    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 google
    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
    1
  3. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    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
    1
  4. blackdam Messages postés 332 Statut Membre 35
     
    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!!!!!!
    1
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. blackdam Messages postés 332 Statut Membre 35
     
    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!! ;)
    0
  7. blackdam Messages postés 332 Statut Membre 35
     
    --
    Plus t'avance moins vite, moins t'avance plus vite
    -1