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() { const std::string message ="Test message" auto msg_queue = SysVMessageQueue::Create("unique_queue_name", false); if (msg_queue == NULL) { LOG(FATAL) << "Create: failed to create" << "unique_queue_name"; } struct msg_buffer msg; msg.mesg_type = 1; strcpy(msg.mesg_text, message.c_str()); int rc = msg_queue->Send(&msg, message.length() + 1, true); if (rc == -1) { LOG(FATAL) << "Send: failed to send message to msg_queue"; } }
#define MAX_MSG_SIZE 200 typedef struct msg_buffer { long mesg_type; char mesg_text[MAX_MSG_SIZE]; } msg_buffer; int example_receive() { auto msg_queue = SysVMessageQueue::Create("unique_queue_name"); if (msg_queue == NULL) { LOG(FATAL) << "create: failed to create" << "unique_queue_name"; } struct msg_buffer msg = {0, {0}}; int rc = msg_queue->Receive(&msg, MAX_MSG_SIZE, 1, true); if (rc == -1) { LOG(FATAL) << "receive: failed to receive any messages"; } std::string text(msg.mesg_text); LOG(INFO) << "Metrics host received: " << text; return 0; }