Programación en C

Colas de mensajes POSIX con programación en C

Colas de mensajes POSIX con programación en C

Comunicación entre procesos POSIX (IPC)

IPC se utiliza para extensiones en tiempo real. Estas colas de mensajes son parte de Linux. Estas llamadas se utilizan ahora como estándar, pero podrían ser parte de versiones contemporáneas. Estas llamadas son fáciles de implementar con una interfaz mucho más limpia.

Colas de mensajes POSIX en Linux

Las colas de mensajes V en un sistema Linux se identifican usando claves que se obtienen usando ftok llamadas. Estas colas de mensajes POSIX suelen utilizar cadenas de nombres. En los sistemas Linux, las colas POSIX se denominan cadenas. Se considera que estas cadenas comienzan con / y luego tienen otros caracteres.  Los procesos que siguen y conocen el nombre del nombre de la cola con los derechos adecuados pueden enviar o recibir mensajes hacia y desde la cola. Esto ayudará a realizar funciones importantes.

¿Qué son las llamadas en cola de mensajes POSIX??

Las colas de mensajes POSIX deben vincularse con cualquier biblioteca que salga de forma real. A continuación se muestran algunas llamadas que se utilizan:

librt usa la opción del compilador -lrt

Los nombres de las llamadas comienzan con mq_prefix

Los detalles de las llamadas en cola se analizan a continuación:

>> mq_open, mq_close

Esta función se usa para abrir una cola POSIX.

Mq_open es una función que se utiliza para llamar al nombre de la cola. El siguiente parámetro es una bandera que se usa para recibir los mensajes. O_WRONLY se usa para enviar mensajes y O_RDWR se usa para enviar y recibir operaciones dentro de la cola. Los usuarios pueden usar la bandera O_NONBLOCK para especificar la cola al modo sin bloqueo y mq_send y mq_receive enviar y recibir datos en una cola.

Sintaxis
La sintaxis de la llamada en cola anterior se muestra a continuación:

#incluir
/ * utilizado para abrir los archivos * /
#incluir
/ * para determinar un archivo basado en la ruta * /
#incluir
/ * para incluir descripciones de la cola de mensajes * /
mqd_t mq_open (carácter constante * nombre, int oflag);
/ * para abrir y acceder a la cola * /
mqd_t mq_open (carácter constante * nombre, int oflag, mode_t modo,
atributo struct mq_attribute *);

Mq_Flags: Puede ser O o no bloqueado

Mq_MaxMsg: Número máximo de mensajes que se pueden ingresar dentro de la cola

Mq_Msgsize: Número máximo de bytes en un mensaje

Mq_CurMsgs: Mensajes enviados actualmente dentro de una cola

mq_close llamadas: Para cerrar todos los descriptores de cola.

mq_notify

Es una llamada que se utiliza para registrar y anular el registro de la notificación de llegada cuando un mensaje entra en una cola vacía.

Sintaxis

#incluir
/ * para incluir todas las descripciones de la cola de mensajes del código * /
int mq_notify (mqd_t mqdes, const struct sigevent * sevp);
/ * para notificar la llegada del mensaje en una cola * /

mq_unlink

Se utiliza para eliminar la cola que tiene queue_name.

Sintaxis

int mq_unlink (const char * nombre_cola);
/ * Para eliminar la cola que tiene un nombre como nombre_cola * /

mq_getattr, mq_setattr

Esta función tiene una estructura de atributos:

struct mq_attr se usa como una cola de mensajes para descriptores.

mq_setattr se utiliza para configurar los atributos dentro de una cola.

Sintaxis

#incluir
int mq_getattribute (mqd_t mqdes, struct mq_attribute * atributo);
int mq_setattribute (mqd_t mqdes, const struct mq_attribute * newattribute,
struct mq_attribute * oldattr);

Ejemplo: comunicación cliente-servidor a través de POSIX

El siguiente es un ejemplo de cómo realizar la comunicación cliente-servidor a través de colas de mensajes POSIX. En el ejemplo, tendremos un archivo de cliente y un archivo de servidor.

Tendremos dos archivos: el primer archivo (servidor) es servidor.C, y el otro archivo (cliente) es cliente.C.

Código del servidor

La imagen que se muestra a continuación muestra el código que usamos para la comunicación cliente-servidor. Primero, llamamos a algunas bibliotecas para definir las cadenas, variables y funciones. Entonces, definimos el fcntl función y el nombre del servidor de cola. Después de eso, definimos el nombre de la cola del servidor, seguido de su tamaño de mensaje y tamaño de búfer, para definir el tamaño de los mensajes que se ajustan a nuestro búfer a la vez. A continuación, llamamos y describimos las colas, luego generamos los siguientes tokens para ver la respuesta del cliente una vez que se envió al cliente. Finalmente, la confirmación se completó imprimiendo el mensaje desde el servidor. En la siguiente sección, verá las banderas discutidas en la sección anterior.

Inicializamos todas las banderas, incluidas mq_flags, mq_maxmsgs, etc. para continuar con el almacenamiento de solicitudes. Luego, aplicamos la condición al nombre del servidor y almacenamos los mensajes en el búfer de cola. Después de esto, en el momento del almacenamiento, nos aseguramos de que las colas siguieran una regla de prioridad basada en el orden de llegada. Al final, el código muestra un mensaje de error si se recibe algún error desde el extremo del cliente. Finalmente, salimos del servidor para enviar la solicitud al cliente.

Guardar el servidor.archivo c

Codigo del cliente

Ahora discutiremos el segundo archivo. La imagen que se muestra a continuación es el código que usamos para la comunicación cliente-servidor. El código comenzó llamando a bibliotecas estándar y definiendo encabezados de variables. Luego, definimos las cadenas y todo tipo de datos. Después de eso, declaramos el encabezado de la cola para definir el nombre de la cola del servidor. A continuación, definimos las colas de permisos y el tamaño de los mensajes dentro de la cola, junto con el tamaño del búfer de mensajes (el tamaño máximo que podría caber dentro de la cola).

Describiremos las colas y crearemos un nuevo cliente para recibir los mensajes enviados desde el final del servidor. Luego, llamaremos a las banderas y las inicializaremos, y llamaremos a la función de fin de cliente. Saldrá de la función en caso de error. El valor se almacena dentro del búfer y se envía una respuesta de solicitud al servidor. En caso de una respuesta, el servidor proporcionará el token, que se imprime una vez que el cliente ha ingresado la entrada. En caso de error, devolverá los valores de error, i.mi., el cliente no ha podido enviar un mensaje al servidor. Después de eso, saldremos del cliente.

Salva al cliente.archivo c

Ejecutando los archivos

Estamos usando un gcc compilador para ejecutar los archivos. Para ejecutar el archivo final del servidor, escriba el comando adjunto en la ventana de la terminal:

$ sudo servidor gcc.c -lrt

A continuación, escriba lo siguiente:

PS ./a.fuera

La salida aparecerá de la siguiente manera:

Pasando a la respuesta del cliente, escriba lo siguiente:

$ sudo gcc cliente.c -lrt

Luego ejecuta lo siguiente:

PS ./a.fuera

La salida aparecerá de la siguiente manera:

Conclusión

En este artículo, aprendió cómo enviar colas de mensajes POSIX con programación en C, así como algunas de sus funciones. Luego, viste algunos ejemplos de este proceso con mayor detalle.

Cómo cambiar los botones izquierdo y derecho del mouse en una PC con Windows 10
Es una norma que todos los dispositivos de mouse de computadora estén diseñados ergonómicamente para usuarios diestros. Pero hay dispositivos de mouse...
Emule los clics del mouse colocando el mouse con Clickless Mouse en Windows 10
El uso excesivo de un mouse o teclado en una postura incorrecta puede provocar muchos problemas de salud, como tensión, síndrome del túnel carpiano y ...
Agregue gestos del mouse a Windows 10 con estas herramientas gratuitas
En los últimos años, las computadoras y los sistemas operativos han evolucionado enormemente. Hubo un momento en que los usuarios tenían que usar coma...