OpenSuse 42.3 Leap에서 일하고 있습니다. 이것은 유닉스 메시지 대기열을 처음 접했을 때 새로운 대기열을 간단하게 여는 데 몇 가지 기본적인 문제가 있습니다. 내 원래 문제는 내가 두 개의 큐를 열 수 없습니다하지만 몇 가지 시도 후 나는 문제가이 이상한 행동으로 감소했습니다 : 내가 컴파일하면C : 메시지 큐를 열 수 없습니다.
실행은 표준 출력으로 위대한 작품을
#include<stdio.h>
#include <mqueue.h>
int main() {
// printf("Hello world!\n");
/* create queue */
char *q_name = "/myQueue";
mqd_t desc = mq_open(q_name, O_RDWR | O_CREAT);
if(desc == (mqd_t) -1)
perror("Error in mq_open");
printf("We have opened %d\n", desc);
/* close descriptor and unlink name */
if (mq_close(desc)) perror("Error in close:");
if (mq_unlink(q_name)) perror("Error in unlink:");
return 0;
}
이 :
We have opened 3
대기열이 올바르게 닫혀 있으며 오류없이 다시 실행할 수 있습니다.
하지만
분명히printf("Hello world!\n");
여전히 제대로 컴파일 라인의 주석 만 실행하면 간단 '안녕하세요 세계의 경우에는 대신
Hello world!
Error in mq_open: Invalid argument
We have opened -1
Error in close:: Bad file descriptor
Error in unlink:: No such file or directory
를 출력하는 경우! 나는 인쇄하려고 :
printf("Hello world! My pid = %d\n", getpid());
다음 대신 Invalid argument
Error in mq_open: Bad address
가 생성되는 오류입니다.
왜 이런 간단한 이유가 있습니다 printf
가 대기열 열림에 충돌합니까? mq_open 매뉴얼 페이지에서