首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IPC消息队列

IPC消息队列
EN

Stack Overflow用户
提问于 2020-11-30 23:27:23
回答 1查看 64关注 0票数 0

我正在用c创建两个应用程序(客户机和服务器),以便通过IPC消息队列进行通信。服务器必须仅使用一个队列为多个客户端操作。必须为服务器提供客户端id作为命令行参数,以及每个客户端的id。客户端由mesg_type识别。

我在接收来自所有客户端的消息时遇到了问题--我可以从客户端A接收消息几次,然后从客户端B接收几次,从客户端A接收几次,依此类推。我认为问题出在代码的以下部分:

代码语言:javascript
复制
int status;
key_t key;
int msgid; 

for(int i=0;i<argc-1;i++){
    clients_ids[i]=atoi(argv[i+1]);
}

key = ftok(".", 50);
msgid = msgget(key, 0666 | IPC_CREAT);
  
if (msgid == -1) {
    fprintf(stderr, "msgget failed: %d\n", errno);
    exit(EXIT_FAILURE);
}
  
do{
 for (int k=0;k<=argc-2;k++){
    status = msgrcv(msgid, &message, sizeof(message), clients_ids[k], 0);
    if(status != -1){
    type = message.mesg_type;
    strcpy(mesg, message.mesg_text);
    }
}

 printf("Message received (from id: %d): %s ",type, mesg);

你能建议我改些什么吗?

EN

回答 1

Stack Overflow用户

发布于 2020-12-01 00:33:38

将对printf()的调用移到for (int k=0;k<=argc-2;k++){循环中。然后将显示所有消息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65076379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档