【发布时间】:2011-01-14 19:19:17
【问题描述】:
有人可以提供一个(合理地)使用带有非空第二个参数的函数 shmat() 的示例吗?
手册说:
#include <sys/shm.h>
void *shmat(int shmid, const void *shmaddr, int shmflg);shmat() 函数将与共享内存标识符 shmid 关联的共享内存段附加到调用进程的数据段。该段附加到由以下条件之一指定的地址:
- 如果
shmaddr是 NULL 指针,则将段附加到系统选择的第一个可用地址。- 如果
shmaddr不是 NULL 指针并且 (shmflg & SHM_RND) 不为零,则该段附加在 (shmaddr - (shmaddr % SHMLBA)) 给出的地址处。- 如果
shmaddr不是 NULL 指针且 (shmflg & SHM_RND) 为 0,则该段附加到 shmaddr 给出的地址。
但我从未见过任何将 shmat 与任何东西一起使用的示例,但 shmaddr 设置为 NULL。在我的项目中,一个进程必须将它附加到malloc()'ed 的内存块上,并且可以很好地使用它,然后另一个进程获取指向该共享内存的指针(通过 shmid),然后在尝试访问内存。
【问题讨论】:
标签: c linux posix shared-memory