2015-04-21 65 views
1

因此,我正在制作一个程序,该程序将具有多个进程,这些进程都需要访问我已定义的结构'node'。所以我初始化内存如下:如何使用shmget跨多个进程共享一块内存

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

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