Rechercher : dans
Par :

Ping pong en C

Dernière réponse le 14 jun 2007 à 19:17:30 blackdam, le 13 jun 2007 à 10:46:26 
 Signaler ce message aux modérateurs

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

Meilleures réponses pour « Ping pong en C » dans :
La compilation et les modules en C et en C++ VoirCet article a pour vocation d'introduire les notions de bases de la compilation en C et en C++ et de la programmation modulaire. Il permet de mieux comprendre les messages d'erreur du compilateur. Les notions abordées ici sont indépendantes du...
3D Secure / Verified by Visa / SecureCode: Qu'est-ce que c'est ? VoirDepuis octobre 2008, les banques et commerçants en ligne ont commencé à adopter le système 3DSecure pour les paiements sur Internet. Qu'est-ce que c'est ? 3DSecure est appelé "Verified by Visa" chez Visa, et "SecureCode" chez Mastercard. (Les logos...
[Langage C] C/C++ Erreur de segmentation VoirQu'est ce qu'une erreur de segmentation Vous êtes en train de développer une application sous Linux en C/C++. Tout va bien, ça compile, les oiseaux chantent. Donc vous lancez votre application pour la tester. Et vous obtenez l'un de ces deux...
Télécharger Visual C++ Express VoirVisual C++ Express est une version "gratuite" et allégée de Visual Studio ; l'utilisation requiert l'inscription sur le site de Microsoft. Cet environnement de développement permet de créer des application Win32 ou du .NET C.
Langage C++ - Les types de données VoirLes types de données Les données manipulées en langage C++, comme en langage C, sont typées, c'est-à-dire que pour chaque donnée que l'on utilise (dans les variables par exemple) il faut préciser le type de donnée, ce qui permet de connaître...
Les chaînes de caractères en C++ VoirQu'est-ce qu'une chaîne de caractères ? Une chaîne de caractères (appelée string en anglais) est une suite de caractères, c'est-à-dire un ensemble de symboles faisant partie du jeu de caractères, défini par le code ASCII. En langage C++, une...
Langage C - Les types de données VoirLes types de données Les données manipulées en langage C sont typées, c'est-à-dire que pour chaque donnée que l'on utilise (dans les variables par exemple) il faut préciser le type de donnée, ce qui permet de connaître l'occupation mémoire (le...

1

mamiemando, le 13 jun 2007 à 18:10:26
  • +1

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

Répondre à mamiemando

2

blackdam, le 14 jun 2007 à 08:12:46

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!! ;) Plus t'avance moins vite, moins t'avance plus vite

Répondre à blackdam

3

mamiemando, le 14 jun 2007 à 10:04:13
  • +1

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

Répondre à mamiemando

4

blackdam, le 14 jun 2007 à 10:53:53

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!!!!!! Plus t'avance moins vite, moins t'avance plus vite

Répondre à blackdam

5

blackdam, le 14 jun 2007 à 15:32:36

--
Plus t'avance moins vite, moins t'avance plus vite

Répondre à blackdam

6

 mamiemando, le 14 jun 2007 à 19:17:30

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 ?

Répondre à mamiemando