如何使用shmget在多个进程之间共享一块内存

时间:2015-04-21 23:21:28

标签: c shared-memory system-calls

所以我正在制作一个程序,它将有多个进程都需要访问我已经定义的结构,节点。所以我按如下方式初始化内存:

    sharedMemory = (node*)malloc(sizeof(node));//sharedMemory is a global node
    sharedMemory->syskey = sys_key;//just a variable from a function
    segment_id = shmget(sharedMemory->syskey, size, S_IRUSR | S_IWUSR | IPC_CREAT);
    sharedMemory = (node*)shmat(segment_id, NULL, 0);

这似乎没问题。但是我需要稍后访问这段内存。所以我试图做的是:

    segment_id = shmget(sharedMemory->syskey, size, S_IRUSR | S_IWUSR | IPC_CREAT);
    sharedMemory = (node*)shmat(segment_id, NULL, 0);

然后使用sharedMemory。但是,当我这样做时,sharedMemory中的所有内容似乎都被重置为' null' (数组等)。我确信我只是在做一些愚蠢的事情,但文档对我来说有点混乱。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

我发现除了sharedMemory是一个全局变量之外我正确地做了。每当我打电话给shmat并附上它时,我都需要重新声明这个。似乎现在正在运作。