2012-01-27 2 views
1

큐에 생성하려고하는 C에서 mq_open에 문제가 있는데 다음 오류 ENOMEM이 표시됩니다. 나는 내가 그것들을 연결 해제하지 않고 많은 대기열을 만들려고 노력했을 수도 있고 이제는 허용 된 수를 초과했다고 생각한다. 이 방법을 표시하고 이러한 큐를 제거 할 수 있습니까? 이것은 응용 프로그램이 닫히고 모든 생성 시도가 실패한 후에도 지속되는 것으로 보입니다.메시지 큐 ENOMEM

sprintf(idTmp->name, "/%08x%d", (uint32_t) idTmp, rand()); 
if ((idTmp->mq = mq_open(idTmp->name, O_CREAT, 0x666, NULL)) == -1) 
+0

'mq_close'를 호출하는 * 것이 있습니까? – spraff

+0

코드가 실패하기 전에 코드가 실패합니다. – JohnB

+0

내 대답과 같이'/ dev/mqueue '를 마운트하려고하면 어떻게 될까요? – pilcrow

답변

3

당신은 질문 :

방법으로 표시가되며, 논문 큐를 제거?

쉽지 않습니다. 일반적인 용의자 (ipcs, ipcrm)는 POSIX IPC (mq_open(...))가 아닌 System V IPC (msgget(...)) 용으로 설계되었습니다.

mq_overview(7) 맨 페이지를 확인하십시오 - Linux 버전은 일반적인 관리 도구로 검사 할 수있는 가상 파일 시스템에 메시지 대기열을 만들 수 있습니다. 그 파일 시스템은 맨 페이지마다 다음과 같이 노출되어 있습니다 :

[root]# mkdir /dev/mqueue 
[root]# mount -t mqueue none /dev/mqueue 
... now ls and rm your way around ... 
+0

감사합니다. 올바른 mq_open은 ipcs가 표시하지 않습니다. 나는/dev/mqueue 디렉토리를 가지고 있지 않았지만 한번 생성 된 모든 큐를 보여 주었다. 감사 – JohnB