Ejemplos java y C/linux

Google
 

Tutoriales

Enlaces

Licencia

Creative Commons License
Esta obra está bajo una licencia de Creative Commons.
Para reconocer la autoría debes poner el enlace http://www.chuidiang.com

Colas de Mensajes en C para Linux

Las colas de mensajes, junto con los semáforos y la memoria compartida son los recursos compartidos que pone unix a disposición de los programas para que puedan intercambiarse información.

En C para unix es posible hacer que dos procesos (dos programas) distintos sean capaces de enviarse mensajes (estructuras de datos) y de esta forma pueden intercambiar información. El mecanismo para conseguirlo es el de una cola de mensajes. Los procesos introducen mensajes en la cola y se van almacenando en ella. Cuando un proceso extrae un mensaje de la cola, extrae el primer mensaje que se introdujo y dicho mensaje se borra de la cola.

También es posible hacer "tipos" de mensajes distintos, de forma que cada tipo de mensaje contiene una información distinta y va identificado por un entero. Por ejemplo, los mensajes de tipo 1 pueden contener el saldo de una cuenta de banco y el número de dicha cuenta, los de tipo 2 puden contener el nombre de una sucursal bancaria y su calle, etc. Los procesos luego pueden retirar mensajes de la cola selectivamente por su tipo. Si un proceso sólo está intersado en saldos de cuentas, extraería únicamente mensajes de tipo 1, etc.

La forma de conseguir una cola de mensajes  en un programa es la siguiente:

Hay una serie de comandos útiles para ver desde una shell las colas que están abiertas, cuántos mensajes contienen e incluso destruirlas.

El Ejemplo

Aquí hay dos fuentes de ejemplo en C sobre UNIX de colas de mensajes cola1.c y cola2.c. cola1 abre la cola de mensajes, envía un mensaje de tipo 1 para que lo lea cola2 y espera un mensaje de tipo 2 . Cuando llega el mensaje de tipo 2, cola1 destruye la cola de mensajes.

Por su parte, cola2 abre la cola mensajes y espera un mensaje tipo 1. Cuando lo recibe, envía un mensaje de tipo 2 y se sale. Deja la destrucción de la cola para cola1.

Para ejecutarlos, compilarlos en primer lugar con make cola1 cola2 (no es necesario fichero Makefile) o bien con g++ cola1.c -o cola1   y g++ cola2.c -o cola2.   Luego en dos shell distintas, ejecutar en la primera cola1 y en la segunda cola2. Cada uno de ellos escribirá el mensaje recibido del otro.

Estadísticas y comentarios

Numero de visitas desde el 4 Feb 2007: