создание сообщения очереди возвращает ноль в id - PullRequest
1 голос
/ 03 апреля 2019

Я не могу понять, что я пропустил.При первом запуске этого 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 Ответ

1 голос
/ 03 апреля 2019

== связывается более плотно, чем =.Попробуйте поставить круглые скобки вокруг присваивания queue_id или поставить его в отдельной строке:

queue_id = msgget(IPC_PRIVATE, IPC_CREAT | IPC_EXCL | 0600);
if(queue_id == -1) {
         perror("queue");
         return -1;
}

Запуск компилятора с -Wall -Wextra -Werror поможет в этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...