2009-10-28 26 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