问题标签 [msgrcv]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 如何将一个消息队列用于多个进程?
正如标题所说,我正在尝试在 linux (Ubuntu) 中创建一个使用 msgget 函数进行通信的 C++ 程序。该程序使用 fork() 函数创建多个进程,我希望每个进程能够通过消息队列相互通信。
我遇到的问题是我不知道如何仅使用一个 msgget 传递消息,因此我不必为每个进程创建一个具有不同密钥的消息。有没有一种方法可以让我例如对消息队列执行带有特定 ID 的 msgsnd,以便只有在 msgrcv 中添加此 ID 的另一个进程才能仅接收此消息并将其余消息留在消息队列中?
我设法在进程之间进行通信的唯一方法是使用不同的密钥为每个进程创建不同的 msgget,但如果有一种方法可以只用一个 msgget 来做同样的事情,我会更喜欢。
c - 为什么 msgrcv 返回标识符已删除?
我正在学习 IPCS,我尝试将消息从客户端发送到服务器,服务器将其乘以 2,然后使用 、 、 和 将其发送ftok
回msgget
客户端。这是我的代码:msgrcv
msgsnd
msgctl
ex1.h
服务器.c
客户端.c
由于第 23/24 行,我得到Invalid argument
或Identifier removed
错误,但我不明白这里有什么问题。
c - 具有相同键和 msgqid 的消息队列的多个条目
我正在练习 IPC 消息队列,我编写了下面的程序来从队列中发送和获取消息。程序在 Linux 平台上运行良好。
但是当我在 Windows 中运行 WSL 上的程序时,我看到多个 ipcs -q
具有相同键和 msgqid 的条目,看起来像 WSL 中的某种错误。
下面是我的程序:
发送消息前:
让我们运行我的程序
消息已发送,请检查ipcs -q
条目
正如我们可以看到具有相同键和 msgqid 的多个条目,我不知道为什么会这样。
让我们使用消息并再次列出消息队列条目
如您所见,味精已正确获取“Hellow World”
我们可以看到 msg 是从队列中消耗的,我只是想知道为什么这么多条目
c - IPC msgsnd/msgrcv 类型字段名称
我试图了解 msgsnd 和 msgrcv 的工作原理。在文档中有一个结构
但我不明白在我的结构类型字段中是否必须具有名称“mtype”。我有不同的结构,我没有声明 mtype,但我使用了“id”之类的字段名称,但似乎我可以成功发送和接收消息。所以我的问题是,msgrcv 如何从用于匹配类型的结构中识别正确的字段?也许是第一个长场?
谢谢