IPC_NOWAIT nous l'utilisons uniquement dans le récepteur
Anwaar Qa
Réponses:
41
Le noyau Linux (2.6) implémente deux files d'attente de messages: (plutôt des 'listes de messages', car l'implémentation se fait en utilisant une liste chaînée ne suivant pas strictement le principe FIFO)
Messages IPC System V
La file d'attente de messages du système V.
Un processus peut invoquer msgsnd()pour envoyer un message. Il doit transmettre l'identifiant IPC de la file d'attente de réception des messages, la taille du message et une structure de message, y compris le type et le texte du message.
De l'autre côté, un processus invoque msgrcv()pour recevoir un message, en passant l'identifiant IPC de la file d'attente de messages, où le message doit être stocké, la taille et une valeur t .
t spécifie le message renvoyé de la file d'attente, une valeur positive signifie que le premier message de type égal à t est renvoyé, une valeur négative renvoie le dernier message égal au type t et zéro renvoie le premier message de la file d'attente.
La sortie ci - dessus provient d' un système Ubuntu 10,10, les valeurs par défaut sont définis dans msg.h .
Plus de choses incroyablement anciennes sur la file d'attente de messages System V expliquées ici .
File d'attente de messages POSIX
La norme POSIX définit un mécanisme de file d'attente de messages basé sur la file d'attente de messages de System V IPC, en l'étendant par certaines fonctionnalités:
Interface simple basée sur des fichiers pour l'application
Réponses:
Le noyau Linux (2.6) implémente deux files d'attente de messages:
(plutôt des 'listes de messages', car l'implémentation se fait en utilisant une liste chaînée ne suivant pas strictement le principe FIFO)
Messages IPC System V
La file d'attente de messages du système V.
Un processus peut invoquer
msgsnd()
pour envoyer un message. Il doit transmettre l'identifiant IPC de la file d'attente de réception des messages, la taille du message et une structure de message, y compris le type et le texte du message.De l'autre côté, un processus invoque
msgrcv()
pour recevoir un message, en passant l'identifiant IPC de la file d'attente de messages, où le message doit être stocké, la taille et une valeur t .t spécifie le message renvoyé de la file d'attente, une valeur positive signifie que le premier message de type égal à t est renvoyé, une valeur négative renvoie le dernier message égal au type t et zéro renvoie le premier message de la file d'attente.
Ces fonctions sont définies dans include / linux / msg.h et implémentées dans ipc / msg.c
La taille d'un message (max), le nombre total de messages (mni) et la taille totale de tous les messages dans la file d'attente (mnb) sont limités:
La sortie ci - dessus provient d' un système Ubuntu 10,10, les valeurs par défaut sont définis dans msg.h .
Plus de choses incroyablement anciennes sur la file d'attente de messages System V expliquées ici .
File d'attente de messages POSIX
La norme POSIX définit un mécanisme de file d'attente de messages basé sur la file d'attente de messages de System V IPC, en l'étendant par certaines fonctionnalités:
Voir ipc / mqueue.c
Exemple
util-linux
fournit des programmes pour analyser et modifier les files d'attente de messages et la spécification POSIX donne quelques exemples C:Créez une file d'attente de messages avec
ipcmk
; généralement vous le feriez en appelant des fonctions C commeftok()
etmsgget()
:Permet de voir ce qui s'est passé en utilisant
ipcs
ou avec uncat /proc/sysvipc/msg
:Remplissez maintenant la file d'attente avec quelques messages:
Encore une fois, vous ne codez généralement pas le msqid dans le code.
Et l'autre côté, qui recevra les messages:
Voyez ce qui se passe:
Après deux réceptions, la file d'attente est à nouveau vide.
Supprimez-le ensuite en spécifiant la clé (
-Q
) ou msqid (-q
):la source