Cygwin / Cygserver共享内存

时间:2017-08-21 02:56:59

标签: c cygwin shared-memory

我试图将一些共享内存代码从CENTOS(3.5)迁移到CYGWIN(2.8.1,win10)。 共享内存通常是这样的:

  1. 通过shmget在进程中生成共享内存。

  2. 通过shmat在此过程中映射共享内存并记录位置,然后将一些信息填入内存。

  3. 通过“shmat”将共享内存映射到另一个进程,传递记录的最后一个进程的位置,因为我们希望两个进程都将共享内存映射到同一地址。

  4. 以下是一些解释的代码:

    // 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!!!
    

    On Centos它运作良好。

    在Cygwin上,一个进程将共享内存映射到0xffd90000,另一个进程与它不同但映射到oxffdb0000。我们检查该进程的内存0xffd90000是否可用。

1 个答案:

答案 0 :(得分:0)

对Linux也有错误的期望,见
https://linux.die.net/man/2/shmat

  

请注意以这种方式附加的共享内存段可能是   附加在不同进程的不同地址。所以,任何   必须使共享内存中维护的指针成为相对的   (通常是段的起始地址),而不是   绝对的。