最近项目一直到Docker环境部署,之前一直正常运行的程序突然出现 msgrcv函数 返回 errorno 13 'permission denied 的
错误,且一直频繁打印该错误,尝试了各种方法和阅读man手册后,找到了改问题的解决办法,主要就是需要在 msgget函数中 设置一下权限,附demo源码,在docker运行正常(demo可以直接运行)
- msgget函数的flag设置为
IPC_CREAT|S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH
或者IPC_CREAT|00666
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <errno.h>
#include <signal.h>
#include <algorithm>
#include <iostream>
#include <sys/stat.h>
int g_msgId = 0;
bool g_exit = false;
struct MsgType {
long msgType;
char buffer[64];
};
void* thread_fun(void* parg) {
//create message queue
MsgType msg;
key_t key;
int msgid;
key = ftok(".", 1);
if (-1 == key) {
printf("ftok error %d\n", errn