[英]C++ boost libraries shared_memory_object undefined reference to 'shm_open'
[英]How to know the available size of the shared memory that is used by `shm_open` in C++?
我正在使用 boost 库为我的 C++ 程序处理 IPC,我发现如果我请求的内存大小大于其容量, boost::shared_memory_object
不会抛出任何错误。 这个问题在堆栈溢出时至少被问过两次:
为什么我可以使用 POSIX 创建比 /dev/shm 上安装的大小更大的共享内存?
和
正如第一个问题的答案所说,没有直接的方法可以确保您不会耗尽共享内存。 我唯一的选择是在请求共享内存之前检查可用内存大小。 然而,从问题
一个答案说共享内存的目录可以是/dev/shm
或/var/run/shm
(或我猜的其他任何东西)。 通过查看shm_overview我们还可以确认/dev/shm
不是唯一的路径,它只是常规路径。 所以我的问题是:鉴于我们不确定shm_open
正在使用的共享内存的目录,我们如何知道 Linux 上共享内存的可用大小?
任何建议将不胜感激。
如果你想要一个仅限于 glibc 的非便携式解决方案,你可以作弊并查看 glibc 的来源。
shm_open: https://code.woboq.org/userspace/glibc/sysdeps/posix/shm_open.c.html#shm_open
调用此函数以获取基本路径: https : //code.woboq.org/userspace/glibc/sysdeps/posix/shm-directory.c.html
它是一种硬编码,似乎不可配置。
但至少你可以自己调用它:
#include <stdio.h>
extern "C" const char *__shm_directory (size_t *len);
int main() {
size_t idontcare;
puts(__shm_directory(&idontcare));
}
(用-lpthread
编译)
然后你可以检查那里的可用空间。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.