C Posix消息队列创建给出了;“无法分配内存”;执行两次后出错!

C Posix消息队列创建给出了;“无法分配内存”;执行两次后出错!,c,posix,ipc,message-queue,C,Posix,Ipc,Message Queue,我创建了4个子进程,并通过一个消息队列在两个子进程之间进行通信。我成功地做到了这一点,但在执行了两次之后,它给出了错误“无法分配内存”。我猜这是由于没有正确删除现有队列造成的。我是否需要在程序结束前关闭或取消每个子进程执行中的链接,或者在父进程中关闭它们就足够了。或者有没有办法在命令行(shell)上用一些命令关闭-取消这些命令的链接。任何建议!我需要重新启动系统作为解决方案,但这当然需要时间 谢谢你的帮助 如果您按照man MQ_overview中的说明安装MQ虚拟文件系统,则可以使用C AP

我创建了4个子进程,并通过一个消息队列在两个子进程之间进行通信。我成功地做到了这一点,但在执行了两次之后,它给出了错误“无法分配内存”。我猜这是由于没有正确删除现有队列造成的。我是否需要在程序结束前关闭或取消每个子进程执行中的链接,或者在父进程中关闭它们就足够了。或者有没有办法在命令行(shell)上用一些命令关闭-取消这些命令的链接。任何建议!我需要重新启动系统作为解决方案,但这当然需要时间


谢谢你的帮助

如果您按照
man MQ_overview
中的说明安装MQ虚拟文件系统,则可以使用C API或shell取消POSIX消息队列的链接(这将在“磁盘”上为您提供一个“目录”(当然不是真的),然后您可以在其中使用类似
ls
rm
的命令


手册页还讨论了在未正确丢弃其他队列时阻止您创建新队列的相关限制。

是的,您需要在每个子进程中调用mq_close(),否则队列将不会被删除。mq_unlink()的帮助说明

如果一个或多个进程具有 启用mq_unlink()时消息队列打开 调用,销毁消息 排队时间推迟到 已删除对消息队列的引用 已关闭。但是,mq_unlink() 呼叫不需要阻塞,直到所有 引用已关闭;它可能 马上回来


发布你的代码(或其中的一部分)-我们不是通灵者。这是我的工作任务,我不想被剽窃吗one@user:如果你给你的老师提供了这个问题的链接(无论如何,这是最诚实的做法),没有人能逃脱剽窃你的代码的惩罚。+100对于larsmans来说;害怕另一个学生在试图通过剽窃来帮助完成家庭作业时剽窃张贴的代码是非常荒谬的。这与Unix上正常文件的工作方式基本相同(在关闭最后一个打开的描述符之前,它们实际上不会被删除)。