El kernel de Linux (2.6) implementa dos colas de mensajes: (en lugar de 'listas de mensajes', ya que la implementación se realiza utilizando una lista vinculada que no sigue estrictamente el principio FIFO)
Mensajes de System V IPC
La cola de mensajes del Sistema V.
Un proceso puede invocar msgsnd()para enviar un mensaje. Necesita pasar el identificador de IPC de la cola de mensajes de recepción, el tamaño del mensaje y una estructura de mensaje, incluido el tipo de mensaje y el texto.
Por otro lado, un proceso invoca msgrcv()para recibir un mensaje, pasando el identificador IPC de la cola de mensajes, dónde debe almacenarse el mensaje, el tamaño y un valor t .
t especifica el mensaje devuelto por la cola, un valor positivo significa que se devuelve el primer mensaje con su tipo igual a t , un valor negativo devuelve el último mensaje igual al tipo t y cero devuelve el primer mensaje de la cola.
Respuestas:
El kernel de Linux (2.6) implementa dos colas de mensajes:
(en lugar de 'listas de mensajes', ya que la implementación se realiza utilizando una lista vinculada que no sigue estrictamente el principio FIFO)
Mensajes de System V IPC
La cola de mensajes del Sistema V.
Un proceso puede invocar
msgsnd()
para enviar un mensaje. Necesita pasar el identificador de IPC de la cola de mensajes de recepción, el tamaño del mensaje y una estructura de mensaje, incluido el tipo de mensaje y el texto.Por otro lado, un proceso invoca
msgrcv()
para recibir un mensaje, pasando el identificador IPC de la cola de mensajes, dónde debe almacenarse el mensaje, el tamaño y un valor t .t especifica el mensaje devuelto por la cola, un valor positivo significa que se devuelve el primer mensaje con su tipo igual a t , un valor negativo devuelve el último mensaje igual al tipo t y cero devuelve el primer mensaje de la cola.
Estas funciones se definen en include / linux / msg.h y se implementan en ipc / msg.c
Existen limitaciones sobre el tamaño de un mensaje (máx.), El número total de mensajes (mni) y el tamaño total de todos los mensajes en la cola (mnb):
La salida anterior es de un sistema Ubuntu 10.10, los valores predeterminados se definen en msg.h .
Aquí se explican más cosas de la cola de mensajes del Sistema V increíblemente antiguas .
Cola de mensajes POSIX
El estándar POSIX define un mecanismo de cola de mensajes basado en la cola de mensajes de System V IPC, extendiéndolo por algunas funcionalidades:
Ver ipc / mqueue.c
Ejemplo
util-linux
proporciona algunos programas para analizar y modificar las colas de mensajes y la especificación POSIX ofrece algunos ejemplos de C:Crea una cola de mensajes con
ipcmk
; generalmente haría esto llamando a funciones C comoftok()
ymsgget()
:Veamos qué pasó usando
ipcs
o con uncat /proc/sysvipc/msg
:Ahora llena la cola con algunos mensajes:
Una vez más, generalmente no codifica el msqid en el código.
Y el otro lado, que recibirá los mensajes:
Mira qué pasa:
Después de dos recibos, la cola vuelve a estar vacía.
Elimínelo luego especificando la clave (
-Q
) o msqid (-q
):fuente