Linux share memory存取權限問題 - Linux

Table of Contents

※ [本文轉錄自 C_and_CPP 看板]

作者: nagahara (Nagahara) 看板: C_and_CPP
標題: [問題] share memory存取權限問題
時間: Thu Oct 22 21:54:52 2009

有一個資料結構長這樣

typedef struct{
int head;
int tail;
int element_size;
void* array;
}Queue;

假設process A create一塊share memory是sizeof(Queue)+ARRAY_SIZE

這塊空間用一個Queue的指標接收:

Queue* queue = shmget(...);

queue->array指到queue下面多create出來的那塊空間:

queue->array = (char*)queue + sizeof(Queue);

Process A存取Queue都沒問題,

Process B用一個Queue*去get這塊空間之後,可以存取head tail element_size

但是要取array裡面的值時,卻得到亂碼,不然就會segment fault,

請問這是什麼原因呢? 要怎麼做才可以存取array的值呢? 謝謝

--

All Comments

Candice avatarCandice2009-10-27
Linux記憶體管理方式造在process B得到的array位址還需remap
Kelly avatarKelly2009-10-30
比較好的方式就是不要在share memory放指標,直接擺陣列進來
Sandy avatarSandy2009-11-04
那麼Queue Node的size是動態配置 不放指標要怎麼實作呢
Hazel avatarHazel2009-11-07
可以用啊,processB存取share memory中指標先算出真實位址即可
Agnes avatarAgnes2009-11-08
要先搞清楚指標只是一個位址,而不同程式在虛擬位址看到的位址
Andrew avatarAndrew2009-11-09
未必是同一個,除非都轉成真實的位址,則可指到同一陣列
Lydia avatarLydia2009-11-11
感謝 找到解決方法了