用于附加共享内存段的shmat

时间:2012-11-06 09:33:52

标签: c linux ipc shared-memory

当我查看shmat的手册页时。它被描述为API的原始函数将与shmid相关联的内存段附加到调用进程的地址空间

我的问题如下:

  • 附加一词对我来说是通用的。我发现很难理解附加引用的基本活动是什么。?
  • 映射一段内存意味着什么?

2 个答案:

答案 0 :(得分:2)

将其用作char *ptr=shmat(seg_id,NULL,0); 它通过函数shmget()将创建的段id附加到包含上述代码的过程。

seg_id是新创建的细分的细分ID NULL表示操作系统将代表用户处理该段的起始地址 0read/write两者的标志

每当进程附加到共享内存时,它必须被分离,以便另一个进程可以通过附加到该段来访问它(如果存在资源的锁定机制。)

分离:shmdt(ptr);

答案 1 :(得分:1)

这里有一个很好的解释:http://www.makelinux.net/alp/035

“在Linux下,每个进程的虚拟内存被分成页面。每个进程都维护从其内存地址到这些包含实际数据的虚拟内存页面的映射。即使每个进程都有自己的地址,多个进程的映射可以指向同一页面,允许共享内存“

相关问题