我不知道自己错过了什么。我第一次运行此msgget() retuns 0
,但是msgctl()
可以将其删除。第二次仍然具有0
和msgctl()
时,由于无效的参数错误而中止。
已经尝试使用某些密钥代替IPC_PRIVATE
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/sem.h>
#include <sys/msg.h>
#include <time.h>
#define DEBUG
int main(){
int queue_id;
if(queue_id = msgget(IPC_PRIVATE, IPC_CREAT | IPC_EXCL | 0600) == -1){
perror("queue");
return -1;
}
if(msgctl(queue_id, IPC_RMID, NULL) == -1) {
perror("queue rmid:");
}
return 0;
}
答案 0 :(得分:1)
==
的绑定比=
更紧密。尝试在queue_id
的赋值周围加上括号,或将其放在自己的行上:
queue_id = msgget(IPC_PRIVATE, IPC_CREAT | IPC_EXCL | 0600);
if(queue_id == -1) {
perror("queue");
return -1;
}
使用-Wall -Wextra -Werror
运行编译器将有助于解决这类问题。