#include "MessageQueue.h" #include "Log.h" #include #include #include #include #include #include #include #include MessageQueue::MessageQueue(const SF_CHAR *path) : pathname(path) { pMsgQueueId = -1; } SINT32 MessageQueue::MessageQueueCreate(void) { key_t key; SF_CHAR touchPath[128] = {0}; if (access(pathname, F_OK) != 0) { sprintf(touchPath, "%s %s", "touch", pathname); system(touchPath); } if ((key = ftok(pathname, 'z')) < 0) { LogInfo("ftok error"); return SF_FAILURE; } if ((pMsgQueueId = msgget(key, IPC_CREAT | 0660)) == -1) { LogError("MsgQueueId = %#x\n", pMsgQueueId); LogError("msgget failed errno.%02d is: %s\n", errno, strerror(errno)); return SF_FAILURE; } LogInfo("MsgQueueId = %#x\n", pMsgQueueId); return SF_SUCCESS; } SINT32 MessageQueue::MessageQueueRecv(SF_MESSAGE_BUF_S *pMessageBuf) { // size_t msgsz = sizeof(pMessageBuf->cmdId) + sizeof(pMessageBuf->s32Wait) + sizeof(pMessageBuf->arg1) + sizeof(pMessageBuf->arg2) + sizeof(pMessageBuf->arg3); size_t msgsz = sizeof(pMessageBuf->cmdId) + sizeof(pMessageBuf->s32Wait) + sizeof(pMessageBuf->paramLen) + QUEUE_BUF_LENGTH; if (msgrcv(pMsgQueueId, pMessageBuf, msgsz, 0, IPC_NOWAIT) == -1) { return SF_FAILURE; } return SF_SUCCESS; } SINT32 MessageQueue::MessageQueueSend(SF_MESSAGE_BUF_S *pMessageBuf) { if (!pMessageBuf) { LogError("pMessageBuf is nullptr.\n"); return SF_FAILURE; } pMessageBuf->mtype = 1; // size_t msgsz = sizeof(pMessageBuf->cmdId) + sizeof(pMessageBuf->s32Wait) + sizeof(pMessageBuf->arg1) + sizeof(pMessageBuf->arg2) + sizeof(pMessageBuf->arg3); size_t msgsz = sizeof(pMessageBuf->cmdId) + sizeof(pMessageBuf->s32Wait) + sizeof(pMessageBuf->paramLen) + pMessageBuf->paramLen; if (msgsnd(pMsgQueueId, pMessageBuf, msgsz, 0) == -1) { return SF_FAILURE; } return SF_SUCCESS; }