gpt4 book ai didi

c - ipcs 的替代品

转载 作者:行者123 更新时间:2023-12-02 10:43:22 35 4
gpt4 key购买 nike

我有一个使用 System V 共享内存段的应用程序。通常它在内部管理这些,没有人需要接触它们。但对于紧急情况,我们有一个实用程序可以手动清除共享内存段。

问题是,为了做到这一点,它运行ipcs,并使用 cut 抓取输出 block 。这看起来相当脆弱。它已经在不同平台上运行略有不同的命令,以反射(reflect) ipcs 输出在 Linux/AIX/Solaris 等上的格式不同的事实。

有没有比解析 ipcs 输出更好的方法来查找共享内存段?

最佳答案

您可以重新实现您自己的 ipcs 版本,无论操作系统如何,它都会提供相同的输出。但这需要一些系统级编程。

在 Linux 上 ipcs 使用 shmctl(0, SHM_INFO, ...) 找出最高使用共享内存段的索引,然后运行 ​​shmctl (index, SHM_STAT, ...) 循环遍历从 0 到最高索引的所有索引,以获得有关每个段的信息。这也应该适用于 FreeBSD(没有记录,但从内核源代码中可以看出),尽管在该操作系统上 ipcs 使用 sysctl 读取 kern.ipc 的值。 shm*.

在 Solaris 上,ipcs 使用 shmids(NULL, 0, &nids) 获取段 ID 的数量,然后调用 shmids(&ids, nids, .. .) 获取实际 ID 列表,然后使用 shmctl(id, IPC_STAT, ...) 获取每个段的信息。

ipcs 是一种相当古老的工具,人们不会期望它的输出在未来发生太大变化,至少在 POSIX 共享内存完全取代 SysV IPC 之前不会。

关于c - ipcs 的替代品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17837088/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com