[問題] Linux share memory存取權限問題

看板Linux作者 (Nagahara)時間16年前 (2009/10/24 11:18), 編輯推噓1(106)
留言7則, 2人參與, 最新討論串1/1
※ [本文轉錄自 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的值呢? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.192.107.210 ※ 編輯: nagahara 來自: 123.192.107.210 (10/22 21:57) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.192.107.210

10/24 16:53, , 1F
Linux記憶體管理方式造在process B得到的array位址還需remap
10/24 16:53, 1F

10/24 17:02, , 2F
比較好的方式就是不要在share memory放指標,直接擺陣列進來
10/24 17:02, 2F

10/25 01:15, , 3F
那麼Queue Node的size是動態配置 不放指標要怎麼實作呢
10/25 01:15, 3F

10/25 16:13, , 4F
可以用啊,processB存取share memory中指標先算出真實位址即可
10/25 16:13, 4F

10/25 16:16, , 5F
要先搞清楚指標只是一個位址,而不同程式在虛擬位址看到的位址
10/25 16:16, 5F

10/25 16:17, , 6F
未必是同一個,除非都轉成真實的位址,則可指到同一陣列
10/25 16:17, 6F

10/27 01:49, , 7F
感謝 找到解決方法了
10/27 01:49, 7F
文章代碼(AID): #1Aud7nFB (Linux)