Bonjour j'ai un problème en ce qui concerne les files de message.
J'ai un processus X qui doit envoyer à un processus Y un message via ce procédé.

Pour être sur que la transmission se fait bien, je crée une boucle do while tant que le message n'est pas transmis.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
typedef struct{
	long type;
	int numPiste;
	int numTarmac;
}Reponse_controleur;
...
int tailleMsgC_bis=sizeof(msgC_bis);
...
if((msgidPISTE_TARMAC=msgget(/*(key_t)*/Moi.cle,IPC_CREAT|0600))==-1){
		printf("Pb msgget 1-controleur.c\n");	
		exit(1);
	}
...
/********************************************************************************************************/
/*Ici ça boucle une fois ensuite ça sort de la boucle et ça affiche bien 'Je suis sorti de la boucle...'*/
/********************************************************************************************************/
				do{printf("No\t%d.\n",getpid());}while(msgsnd(msgidPISTE_TARMAC,&msgC_bis,tailleMsgC_bis,0)==-1);
			//le controleur sors de la boucle.
			printf("Je suis sorti de la boucle moi le controleur %d.\n",getpid());
Le problème est que la boucle qui envoie le message boucle une fois et puis sort ensuite( l'envoie du message se passe alors bien).
Cependant, en ce qui concerne la boucle qui reçoit, elle boucle un certains nombre de fois puis après plus rien et j'entends le ventilateur de l'ordinateur tourner à mort.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
typedef struct{
	long type;
	int numPiste;
	int numTarmac;
}Reponse_controleur;
...
Reponse_controleur msgC_bis;
...
tailleMsgC_bis=sizeof(msgC_bis);
...
if((msgidPISTE_TARMAC = msgget(msgC.cle, 0))==-1){
			printf("Probleme lors de la creation des files de messages.-avion v2.c\n");exit(1);
		}
...
/************************************************************************************************/
/*Blocage ici la boucle fait une fois un essai et puis après plus rien. Et je sais  pas pourquoi.                                                                                               /************************************************************************************************/
		do
		{
			printf("NO\t%d,\t%d\n",getpid(),msgrcv(msgidPISTE_TARMAC,&msgC_bis,tailleMsgC_bis,msgC_bis.type,0)),sleep(1),fflush(stdout),fflush(stdin);
		}while(msgrcv(msgidPISTE_TARMAC,&msgC_bis,tailleMsgC_bis,msgC_bis.type,0)==-1);
		//jamais le programme ne franchit ce seui.
		printf("J'ai bien reçu le message du controleur qui m'attribu la place de tarmac %d et de piste %d.\nMoi l'avion %d\n\a",msgC_bis.numTarmac,msgC_bis.numPiste,getpid());
Aurais je fais une erreur dans ma boucle de réception?