Bonjour à tous,
Je cherche un explication au fonctionnement de la communication inter-processus appelée fil de messages. J'ai plus particulièrement un problème avec les fonctions d'envoie (msgsnd) et de réception (msgrcv).
Si je reprends les entêtes de ces fonctions telles que j'ai pu les trouver dans la doc, les voici:
En ce qui concerne le premier paramètre, c'est assez clair: il s'agit de l'identifiant de notre BAL(Boîte Aux Lettres).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long int msgtyp, int msgflg);
La suite est moins clair. Pour utiliser cette boîte aux lettres, il faut définir une structure de la forme:
Soit! Mais alors voici mes questions:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 struct msg{ long int mtype; char mtext[1]; };
1°) Le deuxième paramètre est un pointeur sur notre structure. Mais alors que se passe t-il lors de l'envoi ou de la réception d'un message.
Qu'envoie t-on? Envoie t-on la structure?
Considérons deux processus: un écrivain qui écrit dans la BAL et un lecteur qui vient y chercher des messages.
Je déclare une variable message de type "struct msg" dans l'écrivain. Et j'écris:
Que signifie cette ligne? J'envoie dans la BAL identifiée par bal_id, un message de type struct msg de taille mtext sans option? Mais alors pourquoi ce "&"???
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 msgsnd(id_bal,&message,sizeof(mtext),0)
Même chose pour le lecteur. J'y déclare une variable message de type "struct msg" et j'écris:
Je vais chercher dans la BAL identifiée par bal_id un message de type struct msg de type 1 et de taille mtext). Mais que se passe t-il en réalité? Je copie ce qu'il y a dans la BAL dans ma structure message???
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 msgrcv(id_bal,&message,sizeof(mtext),1,0)
2°) Pourquoi le troisième paramètre (size) ne concerne que la chaîne de caractères contenu dans la structure et non la structure elle-même? Du même coup, comment est-il possible par la suite de récupérer différents messages d'un type particulier au sein d'un même BAL si ce qui est envoyé n'est que la chaîne de caractères?
Merci d'avance pour votre temps et vos réponses!
Partager