问题标签 [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 投票
1 回答
116 浏览

c - 如何找到等待 Linux System V 消息队列的读取器/写入器?

我的任务是将一些使用 System V 队列的 C/C++ 代码从 HP-UX 移植到 Red Hat Linux (SVr4)。

大多数电话都翻译得很好,但我在一个特定问题上遇到了困难,因为它与在给定队列中发现等待的读者和作者有关。

在 HP 上,可以使用msgctl(IPC_STAT)获取有关给定队列的详细信息的 msqid_ds 结构。

这个结构的细节中有一个 short value msqid_ds.msg_perm.mode,它使用低 9 位来指定 user/group/others 的 r/w 权限。

但是,在 HP 上,高 7 位存储其他状态信息,其中包括以下两个标志的标志:

这允许人们进行测试,例如,(msqid.msg_perm.mode & (MSG_RWAIT | MSG_WWAIT))查看队列中是否有读取器或写入器阻塞。

当我移植到 Linux 时,很明显这种能力是不一样的。这些标志的定义是不存在的,msqid_ds.msg_perm.mode并且显然不存在较高位信息的值。

但肯定存在维护这些队列的读取器和写入器的内核操作。我希望可以调用一些操作来发现这些信息。

0 投票
3 回答
2940 浏览

php - PHP sem_get 函数失败

我已经实现了用于插入用于预订服务的数据库表的访问控制。它可以正常工作一段时间,然后sem_get()尽管我sem_release()在每个sem_get().

sem_remove()也应该打电话吗?

我按照这个网站上的步骤。

0 投票
2 回答
2594 浏览

c - 在删除之前从共享内存中分离

当我有几个进程正在使用共享内存时,我将它们全部分离,但只有一个。

  1. 在使用(使用该进程)删除共享内存之前分离最后一个进程是否有意义shmctl()
  2. 如果没有意义,是否可以在与共享内存分离后将其删除?
0 投票
1 回答
494 浏览

c - shmat() 等在 Linux 内核中是如何实现的。有没有其他方法可以共享内存?

mmap()进程必须从父进程继承映射以共享内存。有没有办法在不共享父进程的进程之间共享内存?shmat()似乎是最好的解决方案,但如果进程没有在退出/死亡时分离内存,则需要清理。

域套接字接近共享内存......

0 投票
2 回答
987 浏览

c - 使用 SysV 计数信号量

我试图通过一个例子来理解计数信号量的概念。但我想在 Linux 中使用 SysV 来实现这一点。
我熟悉二进制信号量和计数信号量的理论部分。
我已经提到了这个链接

从概念上讲,信号量被用作从一个进程到另一个进程的信号机制,所以我试图编写一个简单的程序。

在下面的程序中,我想thread_1等到它没有收到信号thread_2,同样thread_2应该等到它没有收到信号thread_3

所以输出应该是这样的: Hello From thread 3 Hello from thread 2 Hello from thread 1

我知道可以pthread_join()正确使用它来实现它,但我想使用信号量来实现它。

代码:




我是否必须使用多个信号量集才能实现我想要做的事情?

0 投票
1 回答
2086 浏览

python - 共享内存 sysv_ipc Python

我在两个不同的进程之间使用共享内存(sysv_ipc),我想在另一个代码中查看共享内存的最后更新时间。有三个程序,一个写入共享内存,另一个从共享内存读取,第三个我需要外部错误处理,所以我想知道最近几分钟共享内存是否没有更新。有了这个想法,我尝试访问共享内存的属性“last_attach_time”。当我在终端中运行它时它工作正常。那就是我在终端中为共享内存创建了一次对象,然后我尝试连续访问该属性,它工作得很好。在共享内存被写入数据之前,“last_attach_time”更新了时间,当写入停止时,输出变得恒定,这很好。但是当我包含在外部错误处理代码中时,该代码有一个用于持续监控的 while 循环,该属性没有提供正确的数据。即,即使停止写入共享内存,时间仍在增加。有没有人遇到过类似的问题?谢谢。

0 投票
3 回答
210 浏览

c - 是什么阻止我读/写超出共享内存的大小?(系统 V IPC)

我正在做的是:

shmget(shm_key, shm_size, 0666 | IPC_CREAT);(当然附上它)

而且我已经将大小设置为正好 12 字节但是当我尝试类似的东西时:

sprintf(shm_ptr, "Imagine about 200-300 characters here\n");

它似乎在零问题或警告的情况下正常工作,为了检查这一点,我尝试从一个完全不同的进程(我 fork 并执行第一个进程)中读取它,果然

printf("%s", shm_ptr);

打印该段中的消息,它应该是 12 字节。System V IPC 是否应该是这样的,并且没有解决该问题的方法?如果是这样,为什么首先要设置尺寸?

感谢您的时间和提前回答。

0 投票
1 回答
474 浏览

c - 路径名“。”的含义 使用 ftok()

我遇到了以下程序来实现客户端和服务器之间的共享内存 IPC。

以下行用于生成唯一的 sysv 密钥(如此所述):

什么是路径名“。” 在这种情况下是什么意思?我对linux完全陌生,非常感谢一个明确的答案。

0 投票
3 回答
257 浏览

perl - Perl:msgsnd 的参数

我正在维护一些现有的代码

我看到这个片段:

我想理解对 pack() 的调用作为 msgsnd 的第二个参数。

我找到了msgsend的以下文档

调用 System V IPC 函数 msgsnd 将消息 MSG 发送到消息队列 ID。MSG 必须以本机长整数消息类型开头,后跟实际消息的长度,最后是消息本身。这种打包可以通过 pack("l!a*", $type, $message) 来实现。成功返回真,错误返回假。另请参阅 perlipc 中的 SysV IPC 以及 IPC::SysV 和 IPC::Msg 的文档。

这给出了要打包为 $type 的第二个参数,但没有解释 $type 是什么。我试图理解的代码改为传递消息长度。

这是怎么回事?据我所知,现有代码运行可靠。

0 投票
2 回答
564 浏览

c - 用于生成 ftok() 密钥的公式是什么?

用于生成 ftok() 生成的密钥的公式是什么?ftok 是一个用于为 SYSTEM V IPC 创建密钥的 Linux 函数。