Programas Linux escritos para la comunicación de procesos
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.