首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

剔除消息队列的进程需要什么权限

2012-08-29 
删除消息队列的进程需要什么权限我创建了一个消息队列,然后把他的权限设为0000,但是进程还是有办法删除消

删除消息队列的进程需要什么权限
我创建了一个消息队列,然后把他的权限设为0000,但是进程还是有办法删除消息队列。请问能删除消息队列的进程究竟有什么特别的权限呢?代码如下:

C/C++ code
#include<stdio.h>#include<sys/msg.h>//#include"common.h"int main(){    int msgid,ret;    struct msqid_ds buf;    msgid = msgget(111,0666 | IPC_CREAT);    if(msgid >= 0)    {    printf("Created a message queue.\n");    ret = msgctl(msgid,IPC_STAT,&buf);    if(ret == 0)        printf("Mode is %o.\n",buf.msg_perm.mode);    buf.msg_perm.mode = 0000;    ret = msgctl(msgid,IPC_SET,&buf);    if(ret == 0)        printf("After changed mode is %o.\n",buf.msg_perm.mode);    ret = msgctl(msgid,IPC_RMID,NULL);    if(ret == 0)        printf("Removed a message queue.\n");    }    return 0;}


[解决办法]
IPC_RMID
Immediately remove the message queue and its associated data structure, awakening all waiting reader and writer
processes (with an error return and errno set to EIDRM). The calling process must have appropriate (probably,
root) privileges or its effective user-ID must be either that of the creator or owner of the message queue.


manpage里写的很清楚。 你创建的那么creator和owner都是你,当前进程有效用户ID也是你,那么就可以删除,与Perm无关,

热点排行