【发布时间】:2017-08-21 02:56:59
【问题描述】:
我试图将一些共享内存代码从 CENTOS(3.5) 迁移到 CYGWIN(2.8.1, win10)。 共享内存通常是这样工作的:
通过 shmget 在进程中生成共享内存。
通过shmat将共享内存映射到该进程上并记录位置,然后将一些信息填充到内存中。
通过“shmat”将共享内存映射到另一个进程,传递最后记录的进程的位置,因为我们希望两个进程都将共享内存映射到相同的地址。
这里有一些代码来解释:
// one process
size_t size = 1024 * 1024;//1M
int id = shmget(IPC_PRIVATE, size, 0660);
char *madr = 0;
char *location = shmat(id, madr, 0);
// another process
char *location1 = shmat(id, location , 0);
// !!!we hope location1 and location should be the same!!!
在 Centos 上运行良好。
在 Cygwin 上,一个进程将共享内存映射到 0xffd90000,另一个进程与它不同,而是映射到 oxffdb0000。我们检查内存 0xffd90000 在该进程上是否可用。
【问题讨论】:
标签: c cygwin shared-memory