问题标签 [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.
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
并且显然不存在较高位信息的值。
但肯定存在维护这些队列的读取器和写入器的内核操作。我希望可以调用一些操作来发现这些信息。
php - PHP sem_get 函数失败
我已经实现了用于插入用于预订服务的数据库表的访问控制。它可以正常工作一段时间,然后sem_get()
尽管我sem_release()
在每个sem_get()
.
我sem_remove()
也应该打电话吗?
我按照这个网站上的步骤。
c - 在删除之前从共享内存中分离
当我有几个进程正在使用共享内存时,我将它们全部分离,但只有一个。
- 在使用(使用该进程)删除共享内存之前分离最后一个进程是否有意义
shmctl()
? - 如果没有意义,是否可以在与共享内存分离后将其删除?
c - shmat() 等在 Linux 内核中是如何实现的。有没有其他方法可以共享内存?
,mmap()
进程必须从父进程继承映射以共享内存。有没有办法在不共享父进程的进程之间共享内存?shmat()
似乎是最好的解决方案,但如果进程没有在退出/死亡时分离内存,则需要清理。
域套接字接近共享内存......
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()
正确使用它来实现它,但我想使用信号量来实现它。
代码:
我是否必须使用多个信号量集才能实现我想要做的事情?
python - 共享内存 sysv_ipc Python
我在两个不同的进程之间使用共享内存(sysv_ipc),我想在另一个代码中查看共享内存的最后更新时间。有三个程序,一个写入共享内存,另一个从共享内存读取,第三个我需要外部错误处理,所以我想知道最近几分钟共享内存是否没有更新。有了这个想法,我尝试访问共享内存的属性“last_attach_time”。当我在终端中运行它时它工作正常。那就是我在终端中为共享内存创建了一次对象,然后我尝试连续访问该属性,它工作得很好。在共享内存被写入数据之前,“last_attach_time”更新了时间,当写入停止时,输出变得恒定,这很好。但是当我包含在外部错误处理代码中时,该代码有一个用于持续监控的 while 循环,该属性没有提供正确的数据。即,即使停止写入共享内存,时间仍在增加。有没有人遇到过类似的问题?谢谢。
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 是否应该是这样的,并且没有解决该问题的方法?如果是这样,为什么首先要设置尺寸?
感谢您的时间和提前回答。
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 是什么。我试图理解的代码改为传递消息长度。
这是怎么回事?据我所知,现有代码运行可靠。
c - 用于生成 ftok() 密钥的公式是什么?
用于生成 ftok() 生成的密钥的公式是什么?ftok 是一个用于为 SYSTEM V IPC 创建密钥的 Linux 函数。