2013-04-10 93 views
0

我有共同的記憶像這樣指針在共享內存 - C語言的Linux

struct MEMORY { 
char * type; 
int number; 
} 
現在

在代碼中,我讓它共享一切正常,大概但其他進程不能看我怎麼可以用什麼指針指向指針在共享內存?

+1

看一看。 http://stackoverflow.com/questions/2489908/is-it-possible-to-store-pointers-in-shared-memory-without-using-offsets這可以幫助你。 – doniyor 2013-04-10 18:02:27

+1

你嘗試了什麼?還有哪些其他過程正在使用它?你讀過http://advancedlinuxprogramming.com/了嗎,你讀過一些很好的C編程書嗎? – 2013-04-10 18:03:53

+0

指針指向共享內存外的某些東西的問題很好,因爲如果我使fork()父進程和子進程必須共享內存,但指針不起作用 – 2013-04-10 18:06:46

回答

0

您需要確保共享內存附加在所有進程的地址空間中的相同的地址處。否則,就像你想象的那樣,指針值在不同的進程中意味着不同的事物。

你對共享內存使用什麼? mmap或shm?這是mmap調用中的第一個參數。

如果您無法確保所有進程中的地址空間相同,那麼另一種方法是僅向我們提供補償。每個進程都簡單地從共享內存所連接的基址中偏移。

編輯:啊......也許你說的是「char * type」是一些任意指針。請記住,其他進程只能在之間查看共享內存中的內容。所有其他內存位置(指針值)都不可訪問。所以,要使這個指針起作用,它需要的是中的共享內存,而不僅僅是任意的指針。這一點,你需要確保共享內存連接在所有進程中的相同地址。