[英]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.