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.
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).
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());
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.
Aurais je fais une erreur dans ma boucle de réception?
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());
Partager