【发布时间】:2012-10-26 05:40:09
【问题描述】:
当我浏览 shmat 的手册页时。它被描述为API的原始功能是将与shmid关联的内存段附加到调用进程的地址空间。
我的问题如下。
- attach 这个词在我看来很笼统。我很难理解附加所指的基础活动是什么。?
- 映射一段内存是什么意思?
【问题讨论】:
标签: c linux ipc shared-memory
当我浏览 shmat 的手册页时。它被描述为API的原始功能是将与shmid关联的内存段附加到调用进程的地址空间。
我的问题如下。
【问题讨论】:
标签: c linux ipc shared-memory
这里有一个很好的解释:http://www.makelinux.net/alp/035
“在Linux下,每个进程的虚拟内存被分割成页。每个进程都维护着一个从它的内存地址到这些虚拟内存页的映射,其中包含了实际的数据。即使每个进程都有自己的地址,但多个进程的映射可以指向同一个页面,允许共享内存”
【讨论】:
将其用作char *ptr=shmat(seg_id,NULL,0);
它通过函数shmget()将创建的段ID附加到包含上述代码的进程中。
seg_id是新建段的段id
NULL 表示操作系统将代表用户处理段的起始地址
0 是 read/write 两者的标志
当一个进程附加到共享内存时,它必须被分离,以便另一个进程可以通过附加到该段来访问它(如果存在资源锁定机制。)
分离:shmdt(ptr);
【讨论】: