| # msg_queue |
| |
| This is the Cuttlefish message queue wrapper library, as one of the IPC options available. Below are the example usages running in two separate processes. |
| |
| ``` |
| #define MAX_MSG_SIZE 200 |
| #define NUM_MESSAGES 100 |
| |
| typedef struct msg_buffer { |
| long mesg_type; |
| char mesg_text[MAX_MSG_SIZE]; |
| } msg_buffer; |
| |
| int example_send() |
| { |
| // create message queue with the key 'a' |
| int queue_id = msg_queue_create('a'); |
| struct msg_buffer msg; |
| for (int i=1; i <= NUM_MESSAGES; i++) { |
| // create message types 1-3 |
| msg.mesg_type = (i % 3) + 1; |
| sprintf(msg.mesg_text, "test %d", i); |
| int rc = msg_queue_send(queue_id, &msg, strlen(msg.mesg_text)+1, false); |
| if (rc == -1) { |
| perror("main: msgsnd"); |
| exit(1); |
| } |
| } |
| printf("generated %d messages, exiting.\n", NUM_MESSAGES); |
| return 0; |
| } |
| ``` |
| |
| ``` |
| #define MAX_MSG_SIZE 200 |
| |
| typedef struct msg_buffer { |
| long mesg_type; |
| char mesg_text[MAX_MSG_SIZE]; |
| } msg_buffer; |
| |
| int example_receive() |
| { |
| // create message queue with the key 'a' |
| int queue_id = msg_queue_create('a'); |
| struct msg_buffer msg; |
| while (1) { |
| int rc = msg_queue_receive(queue_id, &msg, MAX_MSG_SIZE, 1, false); |
| if (rc == -1) { |
| perror("main: msgrcv"); |
| exit(1); |
| } |
| printf("Reader '%d' read message: '%s'\n", 1, msg.mesg_text); |
| } |
| return 0; |
| } |
| ``` |