2009-10-28 47 views
2

我可以使用ipcs(1)列出Solaris 10機箱上的活動共享內存對象,但它會按鍵列出它們。我通過shm_open(3)打開對象,但是,它以字符串作爲名稱來標識對象。有沒有辦法按名稱列出共享內存對象,或者只是獲得密鑰< - >名稱映射?我最感興趣的是從命令行運行的東西,儘管這樣做的API也可以。謝謝!在Solaris上按名稱列出共享內存對象

+0

看起來像我假設鍵和名稱之間存在1對1映射是錯誤的。另一種方式來問這個...在Linux中,我可以這樣做: 'ls -l/dev/shm' 並查看我在Solaris 10下獲得的信息。 – Chris 2009-10-28 18:54:52

回答

2

至於我記得POSIX共享內存在Solaris下出現的文件系統直接下/tmp/作爲.SHMDxxx文件或下/var/tmp/.SHMD/上。這可能會或可能不會對您有所幫助,而且我沒有一個可方便驗證的Solaris框。

+0

是的,'/ tmp/.SHMD *'在我的機器上。所以我認爲他們對於shm_open(3)來說是神奇的東西,但看起來它可能只是一個打開(2)的包裝,它在適當的文件系統上創建了支持文件?謝謝! – Chris 2009-10-28 19:49:58

+0

shm_open畢竟返回「文件」描述符,你應該mmap。我可能會誤解,但我想這是作爲某種VFS攻擊完成的(需要查看Solaris源代碼:) – 2009-10-28 20:09:50

-1

我不知道列表名稱或獲取鍵/名稱映射的方法。但我想我知道一個API可以解決你的問題。

我認爲你可以通過使用系統V接口,這也是一個Posix API附加關鍵段。我相信,它的工作方式是這樣的:

int attach_shmem(key_t key, void** pp){ 
    void* p; 
    int id; 

    id = shmget(key, 0, 0); 
    if (id < 0) { 
     perror("shmget"); 
     return ERR_SHMGET; 
    } 
    p = shmat(id, 0, 0); 
    if ((long)p == -1) { 
     perror("shmat"); 
     return ERR_SHMAT; 
    } 
    *pp = p; 
    return 0; 
} 
+0

System V IPC接口與POSIX IPC接口!!!! – 2017-11-21 23:10:33