#c
#c
Вопрос:
Я не могу понять, что я пропустил. В первый раз, когда я запускаю это, 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;
}
Ответ №1:
==
привязывается более плотно, чем =
. Попробуйте заключить в круглые скобки присвоение queue_id
или поместить его в отдельную строку:
queue_id = msgget(IPC_PRIVATE, IPC_CREAT | IPC_EXCL | 0600);
if(queue_id == -1) {
perror("queue");
return -1;
}
Запуск вашего компилятора с -Wall -Wextra -Werror
поможет с такого рода вещами.