메세지 큐 생성에서 무슨 permission같은 것이 있습니까?

indizarm의 이미지

메세지 큐 생성에서 무슨 permission같은 것이 있습니까?
예를 들어서 root가 아닌 다른 user로 한다면, 생성이 안된
다던가.

다음은 제가 작성한 것이 아닌 인터넷에서 긁어온 것입니다.
그리고 permission denied라는 에러를 만들어내는 code
입니다..

#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <sys/stat.h>
struct msgbuf
{
    long msgtype;
    char buf[512];
};

int main(int argc, char **argv)
{
    key_t key_id;
    int i;
    struct msgbuf mybuf;
    int msgtype;

    key_id = msgget((key_t)1234, IPC_CREAT|0666);
    if(key_id == -1)
    {
        perror("msgget error : ");
        exit(0);
    }

    while(1)
    {
        if (msgrcv(key_id, (void *)&mybuf, sizeof(struct msgbuf), 1, 0) == -1)
        {
            perror("quit : ");
            exit(0);
        }
    }
}
펑키의 이미지

혹시 키값이 중복되지 않으신가요.?

bbohihi의 이미지

ipcs를 사용해서 message queue를 삭제 하시고 다시 실행하시면 될 겁니다.

good job

indizarm의 이미지

ipcs -q 이렇게 하면 아무것도 없습니다.

그리고 msgctl()로 지우기도 했고요

What a Cool Days!!!

굥의 이미지

1) msgctl()로 생성돼있는 message queue들을 지웠고,
2) msgget()을 불러올 때 flag를 IPC_CREAT | 0666 으로 설정하니까 문제가 해결됐습니다!
참고로 이전에는 IPC_CREAT만 넣었었습니다.