2015-04-21 76 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並附上它時,我都需要重新聲明。似乎現在正在工作。