Ejemplo de programación de la cola de mensajes de Linux

  
 

Prólogo:

Una cola de mensajes es una lista enlazada de mensajes. Puede pensar en un mensaje como un registro con un formato específico y una prioridad específica. Un proceso que tiene acceso de escritura a la cola de mensajes puede agregarle nuevos mensajes de acuerdo con ciertas reglas; un proceso que tiene permiso de lectura a la cola de mensajes puede leer el mensaje de la cola de mensajes.

Función:

1. Cree una nueva cola de mensajes u obtenga una cola de mensajes existente

Prototipo:
int msgget (key_t key, int msgflg);

Parámetro:

key: se puede considerar como El número de puerto también puede ser generado por la función ftok.

msgflg: valor de IPC_CREAT, si no hay tal cola, cree uno y devuelva un nuevo identificador; si ya existe, devuelva el identificador original.

valor de IPC_EXCL, -1 si no hay tal cola, o 0 si ya existe.

2 a la cola de mensajes leer /escribir

Prototipo :.

msgrcv mensaje de acceso de la cola:
ssize_t msgrcv (int msqid, void * msgp, size_t msgsz, a largo msgtyp, int msgflg);

msgsnd datos en la cola de mensajes:
int msgsnd (int msqid, const void * msgp, size_t msgsz, int msgflg);

parámetro:

msqid: ID de la cola de mensajes

msgp: puntero al búfer de mensajes. Esta ubicación se utiliza para almacenar temporalmente los mensajes enviados y recibidos. Es una estructura general definible por el usuario, en la siguiente forma: Br> struct msgstru {mtype largo; //mayor que 0 char mtext [512];};


msgsz: el tamaño del mensaje.

msgtyp: La forma del mensaje leído desde la cola de mensajes. Si el valor es cero, significa que se leerán todos los mensajes en la cola de mensajes.

msgflg: se utiliza para indicar las acciones que debe realizar el programa central si no hay datos en la cola. Si la combinación IPC_NOWAIT msgflg constante, si la cola de mensajes está llena, en msgsnd msgsnd () Ejecutar () no será bloqueado, pero devuelve inmediatamente -1 si el msgrcv ejecución (), entonces la cola de mensajes estaba vacía Cuando no espere, devuelva inmediatamente -1 y configure el código de error en ENOMSG. Cuando msgflg es 0, msgsnd () y msgrcv () toman el modo de espera de bloqueo cuando la cola está llena o vacía.
atributos

3 cola de mensajes Conjunto

Prototipo:
int msgctl (int msgqid, int cmd estructura msqid_ds * buf);

sistema de parámetros :. msgctl llamada al msgqid identificado colas de mensajes operación cmd, el sistema define tres operación cmd: IPC_STAT, IPC_SET, IPC_RMIDIPC_STAT: este comando se utiliza para obtener la estructura de datos msqid_ds correspondiente a la cola de mensajes, y lo guarda en la buf espacio de direcciones especificado. IPC_SET: este comando se usa para establecer las propiedades de la cola de mensajes. Los atributos que se deben configurar se almacenan en buf.

IPC_RMID: Elimine la cola de mensajes identificada por msqid del kernel.

Instancia:

Remitente del mensaje: send.c
/*send.c*/#include < stdio.h > #include < sys /types.h > # incluir < sys /ipc.h > # include < sys /msg.h > # include < errno.h > #define MSGKEY 1024struct msgstru {long msgtype; charla msgText [2048];}; main () {msgstru struct msgs; int Msg_type; Char str [256]; int ret_value; int msqid; msqid = msgget (MSGKEY, IPC_EXCL); /* comprobar la cola de mensajes si hay * /if (msqid < 0) {msqid = msgget (MSGKEY, IPC_CREAT

Copyright © Conocimiento de Windows All Rights Reserved