当我查看shmat
的手册页时。它被描述为API的原始函数将与shmid
相关联的内存段附加到调用进程的地址空间。
我的问题如下:
答案 0 :(得分:2)
将其用作char *ptr=shmat(seg_id,NULL,0);
它通过函数shmget()
将创建的段id附加到包含上述代码的过程。
seg_id
是新创建的细分的细分ID
NULL
表示操作系统将代表用户处理该段的起始地址
0
是read/write
两者的标志
每当进程附加到共享内存时,它必须被分离,以便另一个进程可以通过附加到该段来访问它(如果存在资源的锁定机制。)
分离:shmdt(ptr);
答案 1 :(得分:1)
这里有一个很好的解释:http://www.makelinux.net/alp/035
“在Linux下,每个进程的虚拟内存被分成页面。每个进程都维护从其内存地址到这些包含实际数据的虚拟内存页面的映射。即使每个进程都有自己的地址,多个进程的映射可以指向同一页面,允许共享内存“