我还有两个问题。 1.如何将消息队列名称作为命令行parameter passing? 比如我写道:
char src[50] , dest[50]; strcpy(src , "/"); strcpy(dest , argv[1]); // argv[1] is the name of message queue strcat(dest , src); char *msgqueue; strcpy(msgqueue , dest);
但是,它给出了分段错误,当我改变为char msgqueue [50],没有有效的错误出现。
我需要你的帮助,他们是完成作业的最后一步!
感谢你所做的一切!
char *msgqueue; //allocate memory and then copy strcpy(msgqueue , dest);
要么
msgqueue=strdup(dest);
要么
正如Joachim Pileborg所建议的那样
如果不需要更多的修改,只需msgqueue = dest;
你想复制argv[1]
到消息队列,然后在末尾添加“/”。
char *msgqueue=malloc(strlen(argv[1])+3); //one for null byte and another one for / for safe use one extra byte strcpy(msgqueue,argv[1]); strcat(msgqueue,"/");
你应该为msgqueu
分配内存。 例如
msgqueue = malloc(255);
和somwhere你应该释放这个内存在C中查看内存分配
我如何能够达到消息队列中的元素数目? 我试过m_attr.mq_msgsize,但是我发现它没有给出答案。
我假设你是指队列中有多少条消息。 你用mq_getattr
这个。 您已经在服务器中使用了mq_getattr
,但您正在查看不同的字段。 你想要mq_curmsgs
。
我假设你想看看这个,因为你想知道在你的服务器上有多少个mq_receives
,这样你就不会阻止msg的接收,这个msg将永远不会到达。 这是做这件事的方法之一,但这并不是很好的证明,因为在你的服务器检查多少条消息和你的客户端停止写消息之间总会有一个竞争条件。 还有其他的选择(例如非轮询队列,定时接收和mq_notify),但最简单的情况是使用客户端发送的一条单独的消息,通知服务器“我完成了”。