我想做一个程序在C接收消息队列中的消息。我有现有的代码在这里:
typedef struct {
long id;
char mes[20];
} message;
int main() {
key_t cle = ftok(".",0);
if(cle == -1){
perror("ftok");
return -1;
}
int msqId = msgget(cle, IPC_CREAT | IPC_EXCL ) ;
if (msqId == -1) {
msqId = msgget(cle, IPC_EXCL);
if (msqId == -1) {
perror("msgget");
return -1;
}
}
message mes;
while (1) {
int received = msgrcv(msqId, &mes, sizeof(message)-sizeof(long), 0, 0);
if(received == -1){
perror("msgrcv");
return -1;
}
printf ("Server: message received.\n");
}
return 0;
}
它给出了以下错误:msgrcv:权限被拒绝
我还尝试使用以下命令更改 ftok 的路径:“/tmp”、“/etc/密码”
1条答案
按热度按时间yws3nbqq1#
msgget的参数决定了创建它时所使用的权限。这是一个模式编号,可以用八进制指定,例如
0600
,以向当前用户给予读写权限。或者,常量S_IRWXU
(等于0700)也可以用于执行相同的操作:您可能希望在
msgget()
调用之后添加调试打印,以了解它是创建了一个新队列(使用您给予的权限),还是找到了一个现有队列(具有创建时指定的权限)。