IPC utilizando colas de mensajes

Requisito previo: Comunicación entre procesos 
Una cola de mensajes es una lista enlazada de mensajes almacenados dentro del kernel e identificados por un identificador de cola de mensajes. Se crea una nueva cola o se abre una cola existente mediante msgget()
Los mensajes nuevos se agregan al final de una cola mediante msgsnd() . Cada mensaje tiene un campo de tipo entero largo positivo, una longitud no negativa y los bytes de datos reales (correspondientes a la longitud), todos los cuales se especifican en msgsnd() cuando el mensaje se agrega a una cola. msgrcv() recupera los mensajes de una cola . No tenemos que buscar los mensajes en un orden de primeras entradas, primeras salidas. En su lugar, podemos obtener mensajes en función de su campo de tipo.
Todos los procesos pueden intercambiar información a través del acceso a una cola de mensajes del sistema común. El proceso de envío coloca un mensaje (a través de algún módulo de paso de mensajes (OS)) en una cola que puede ser leída por otro proceso. A cada mensaje se le asigna una identificación o tipo para que los procesos puedan seleccionar el mensaje apropiado. El proceso debe compartir una clave común para obtener acceso a la cola en primer lugar.
 

Llamadas al sistema utilizadas para las colas de mensajes: 
 

  • ftok() : se utiliza para generar una clave única.
  • msgget() : devuelve el identificador de la cola de mensajes para una cola de mensajes recién creada o devuelve los identificadores de una cola que existe con el mismo valor de clave.
  • msgsnd() : los datos se colocan en una cola de mensajes llamando a msgsnd().
  • msgrcv() : los mensajes se recuperan de una cola.
  • msgctl() : Realiza varias operaciones en una cola. Generalmente se usa para destruir la cola de mensajes.

COLA DE MENSAJES PARA EL PROCESO DE ESCRITOR 
 

C

// C Program for Message Queue (Writer Process)
#include <stdio.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#define MAX 10
  
// structure for message queue
struct mesg_buffer {
    long mesg_type;
    char mesg_text[100];
} message;
  
int main()
{
    key_t key;
    int msgid;
  
    // ftok to generate unique key
    key = ftok("progfile", 65);
  
    // msgget creates a message queue
    // and returns identifier
    msgid = msgget(key, 0666 | IPC_CREAT);
    message.mesg_type = 1;
  
    printf("Write Data : ");
    fgets(message.mesg_text,MAX,stdin);
  
    // msgsnd to send message
    msgsnd(msgid, &message, sizeof(message), 0);
  
    // display the message
    printf("Data send is : %s \n", message.mesg_text);
  
    return 0;
}

COLA DE MENSAJES PARA EL PROCESO DEL LECTOR 
 

C

// C Program for Message Queue (Reader Process)
#include <stdio.h>
#include <sys/ipc.h>
#include <sys/msg.h>
  
// structure for message queue
struct mesg_buffer {
    long mesg_type;
    char mesg_text[100];
} message;
  
int main()
{
    key_t key;
    int msgid;
  
    // ftok to generate unique key
    key = ftok("progfile", 65);
  
    // msgget creates a message queue
    // and returns identifier
    msgid = msgget(key, 0666 | IPC_CREAT);
  
    // msgrcv to receive message
    msgrcv(msgid, &message, sizeof(message), 1, 0);
  
    // display the message
    printf("Data Received is : %s \n", 
                    message.mesg_text);
  
    // to destroy the message queue
    msgctl(msgid, IPC_RMID, NULL);
  
    return 0;
}

Producción: 
 

Publicación traducida automáticamente

Artículo escrito por shubham_rana_77 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *