问题标签 [sysv-ipc]

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.

0 投票
0 回答
662 浏览

linux - shmget() 什么时候返回零 shmid?

我正在运行使用 SYSV 共享内存的简单测试程序。我发现有时 shmget() 返回零 shmid,如果请求的共享内存段已经存在。谁能解释在哪种情况下 shmaget() 返回零 shmid ?

提前致谢。

0 投票
3 回答
331 浏览

linux - Ada POSIX 绑定和多套 IPC 的 POSIX 接口

我正在查看标准的Ada POSIX 绑定和 GNAT 的Florist实现。目的是评估是否可以将遗留应用程序从其使用 C POSIX 函数的 pragma Import 移植到使用标准绑定。最终目标是能够在不更改源代码的情况下在 Solaris 和 Linux 中重新编译应用程序。我怀疑 UNIX 传统中用于进程间通信功能的几组接口,如信号量、消息队列等。 Florist 正在导入这些 C 函数:

  • 信号量: sem_init sem_destroy sem_open sem_close sem_unlink sem_wait sem_trywait sem_post sem_getvalue
  • 消息队列: mq_close mq_getattr mq_notify mq_open mq_receive mq_send mq_setattr mq_unlink

当应用程序导入这些其他集合时: - 信号量:semget semop semctl - 消息队列:msgctl msgrcv msgsnd

一些来源将应用程序使用的集合定义为 System V 而不是 POSIX,而在其他来源中,它们被声明为由IEEE Std 1003.1-2001 标准化,这显然是 POSIX。

我的问题是:

  • “System V”集真的被 POSIX 标准化了吗?
  • 如果它们是 POSIX,为什么标准的 Ada POSIX 绑定不提供对它们的绑定?它们是否比其他接口“更少 POSIX”?
  • 如果我决定将应用程序移植到 Florist,我应该考虑哪些行为差异以防止任何回归?你会建议反对吗?
0 投票
1 回答
278 浏览

c - 为什么我不能与我创建的 System V 信号量交互?

我正在尝试将 C 中的 System V 信号量用于实验室,但我的课程对我没有帮助。

我可以创建我的信号量并将其删除(使用 semget() 和 semctl()),但我不能与之交互:它的值始终保持不变 (0),并且当我问它时它不会做它的信号量工作到(使用 semop())。

顺便说一句,我在下面提取了我已经写过的关于我的信号量的代码:

有人知道我的代码中缺少什么来使我的信号量工作吗?

注意:不,我不能使用 POSIX 信号量。是的,我知道这很可悲。

0 投票
1 回答
715 浏览

c - 为多个客户端设计一个 Unix 消息队列服务器

为了使一台服务器和多个客户端仅使用一个消息队列,我应该在以下代码中进行哪些修改。我很确定我需要分配不同的值msgid,然后使用它从消息队列中获取消息,但不完全确定我是否正确以及如何实现它。如果有任何帮助,我将不胜感激。

代码1:

代码 2:

0 投票
1 回答
988 浏览

python - Raspberry Pi 上 C 和 Python 之间的共享内存

背景:目标是在 C 程序和 Python 程序之间共享内存(有符号整数数组)。C 程序写入一个数组以及一个状态标志,通知 python 程序等待,直到所有数据都被写入。一旦 Python 程序读取了数组,它就会更新 STATUS 标志,通知 C 程序可以自由地写入下一个数组。这个过程应该无限重复。

硬件/操作系统:运行 Stretch OS 的 Raspberry Pi 3

软件: 1. 使用 sysv_ipc 和 numpy 的 Python 3.5 2. 使用 gcc 编译的 C 语言,使用库:sys/ipc.h 和 sys/shm.h

问题:状态标志是 int 类型。从 Python 程序设置共享内存的状态标志时,我似乎无法将其设置为 int 值。我只能将 int 转换为字符串并设置它,但这不是所需的方法。

请求:谁能演示如何将python中的状态标志写入整数?

C 代码 - 数组生成器(最初来自 stackoverflow.com,发布:53736985)

Python代码

0 投票
0 回答
116 浏览

windows - 如何在 MSYS2 中使用 SYSVIPC?

msys2/gcc在 64 位 MSYS2 安装中使用包,在 Windows 10 64 位下。

示例 C 程序:

当我从 MSYS2 shell 运行它时,我得到FAIL 88ENOSYS表明 shmget 没有实现。

是否可以进行通话?完整程序还使用semgetsemop

从谷歌搜索来看,在 MSYS2 中似乎有很多与 SYSV IPC 相关的源代码,但可能需要在某处启用某些东西。

0 投票
1 回答
57 浏览

c - 找不到我的猜谜游戏的解决方案

我正在制作一个不同版本的猜谜游戏。这一次,子进程必须将它的猜测发送给父进程,然后父进程对其进行评估。我认为我做错的是我的孩子只跑了一次,但在找到正确的数字之前无法弄清楚如何猜测。

0 投票
2 回答
209 浏览

c - semop 调用中 EIDRM 和 EINVAL errno 之间的区别

我正在使用 Sys V Semaphores 测试一些代码,以了解其从各种事件中恢复的能力,并且对于其中一项测试,我在进程处于其关键部分时删除了信号量集(从终端)。当需要通过另一个调用来释放锁时,它返回了一个设置为semop的错误代码。errnoEIDRM

根据 semop 的手册页,这些是每个errno含义的描述:

EIDRM:信号量集已删除。

EINVAL:信号量集不存在,或者 semid 小于零,或者 nsops 具有非正值。

我想了解的是不存在的信号量集与已删除的信号量集之间的区别。我以为区别在于errno如果EINVAL信号量集在系统调用之前已被删除,并且EIDRM信号量集在系统调用开始时已经存在并在完成之前被删除(例如信号量集通过系统调用在信号量上阻塞进程时被删除)。

0 投票
1 回答
130 浏览

c++ - linux ipc. Why is msgrcv always blocking?

client readline write to shared memory.and send a msg to server. server get msg and read from shared memrory.

But the server cannot output correctly, The server did not output anything,I do not know why.

the man pages says that: If no message of the requested type is available and IPC_NOWAIT isn't specified in msgflg, the calling process is blocked until one of the following conditions occurs

but the server is always blocked.

I use gdb to debug it,find out that std::cout does not work

debug context

Below is the code

server code:

client code

0 投票
1 回答
637 浏览

c - 有没有办法增加 SysV 消息队列中可以包含的最大消息量?

我刚刚从 POSIX 切换到 SysV,因为 SysV 的限制要高得多(1024 对 10)。但我仍然需要更高的限制。该限制应在运行时更改,因为它取决于用户选择的数据。

使用 POSIX,可以增加限制,但每次都必须以 root 身份运行代码,而我不能这样做。

有没有办法增加 SysV 的限制?