Red de conocimientos turísticos - Información de alquiler - Programas Linux escritos para la comunicación de procesos

Programas Linux escritos para la comunicación de procesos

Uso de colas de mensajes en Linux

Linux proporciona una serie de interfaces de funciones de cola de mensajes, lo que facilita su uso para la comunicación entre procesos. Su uso es similar al de los otros dos sistemas

V

mecanismo PIC, señalización y memoria de disfrute.

1. Función msgget

Esta función se utiliza para crear y acceder a la cola de mensajes. Su prototipo es:

int

msgget(key_t,

key,

int

msgflg) ;

Al igual que con otros mecanismos de ipc, el programa debe proporcionar una clave para nombrar una cola de mensajes específica. msgflg es un indicador de permiso que indica el acceso a la cola de mensajes, que es lo mismo que el acceso a un archivo. A msgflg se le puede realizar una operación OR con ipc_creat para crear una cola de mensajes si la cola de mensajes nombrada por la clave no existe. Si la cola de mensajes nombrada por la clave existe, el indicador ipc_creat se ignora y solo se devuelve el identificador.

Devolverá el identificador (un número entero distinto de cero) de la cola de mensajes nombrada por la clave, o -1 en caso de error.

Función msgsnd

Esta función se utiliza para agregar mensajes a la cola de mensajes. Su prototipo es:

int

msgsend(int

msgid,

const

void

*msg_ptr,

size_t

msg_sz,

int

msgflg

msgid); Es el identificador de la cola de mensajes devuelto por la función msgget.

msg_ptr es un puntero al mensaje que se enviará, pero la estructura de datos del mensaje tiene ciertos requisitos. La estructura del mensaje a la que apunta el puntero msg_ptr debe ser una estructura que comience con una variable miembro entera larga que será utilizada por la función receptora para determinar el tipo de mensaje. Por lo tanto, la estructura del mensaje debe definirse así:

struct

my_message{

long

int

message_type;

//*

los

datos

que

deseas

deseo

deseo

deseo

deseo

deseo

deseo

deseo

p>

deseo

deseo

deseo

deseo

deseo

deseo

para

transferir*

};

msg_sz es la longitud de la información señalada por msg_ptr. Tenga en cuenta que es la longitud del mensaje, no la longitud de toda la estructura, es decir, msg_sz es la longitud de la variable miembro del tipo de mensaje entero largo, no incluida.

msgflg controla lo que sucede cuando la cola de mensajes actual está llena o cuando la cantidad de mensajes en la cola alcanza un límite en todo el sistema.

Si la llamada se realiza correctamente, se colocará una única copia de los datos del mensaje en la cola de mensajes y se devolverá 0; de lo contrario, se devolverá -1.