記錄 system v ipc(1) 共享記憶體

2021-06-18 06:25:47 字數 1149 閱讀 4710

linux 的system v ipc是程序間通訊的重要工具。

使用共享記憶體的基本步驟:

1、用ftok產生 key_t變數

2、用shmget建立共享記憶體

3、用shmat對映共享記憶體

4、之後是共享記憶體的操作,直接操作對映的變數位址

int shmgat(key_t key, int size, int shmflag);

key:上一步產生的key_t變數

size:建立共享記憶體的大小

shmflag:建立時的引數

成功返回共享記憶體的id 失敗返回-1

void *shmat(int shmid, const void *shmaddr, int shm***)

shmid:上一步產生的共享記憶體id

shm***:開啟標誌shm_reonly唯讀, 0 讀寫

例子:輸入資料方:

#include #include #include #include #include #include int main(void)

void *a;

if((a = shmat(shmid, null, 0)) == (void *)-1)

while(1)

fgets((char*)a, 1024, stdin );

return 0;

}

接收資料方:

#include #include #include #include #include #include int main(void)

void *b;

if((b = shmat(shmid, null, 0)) == (void *)-1)

while(1)

} return 0;

}

兩個檔案放在同一目錄下執行。

我注意到有些奇怪的一點,就是建立共享記憶體的時候似乎必須加入判斷語句,如果不加入,會產生段錯誤。即使說加入的判斷內容完全沒有執行也必須加入判斷,如傳送方**中注釋掉的那一行,如果注釋符號刪除,並把下面的整個if語句注釋掉,沒有經過判斷的話無論結果如何程式都會出現段錯誤。

至於其他的shmdt()(取消對映)和shmctl()(設定共享記憶體),也是比較有用的。

2 28共享記憶體(1)

shmget只是建立或者取得了乙個共享記憶體段,該共享記憶體段和哪個程序都沒有關係,程序還要通過shmat來附上共享記憶體段,得到該共享記憶體段在該程序的虛擬位址空間中的位置指標。然後才可以進行操作。操作結束後,要呼叫shmdt和共享記憶體段進行分離,分離之後,共享記憶體還存在,只是這個程序不能使用...

學習記錄 1

首先開啟示例的 文字挖掘 工作流,看到裡面有三個節點 右鍵檢視excel節點中的示例資料,發現 是詞頻表。所以這個示例工作流是處理提取好的詞頻表,而不是處理原始資料提取詞彙。excel節點的引數都很好理解,看了就懂了,所以略過。第二個節點是篩選高頻詞,右鍵看此節點的配置。第乙個選項 選擇方式 是選擇...

工作記錄1

簡歷模板資料 csdn 一元購買 提取碼 9phn 作為一名應屆生,什麼方式比較的好 校招 同類一起比較,比較容易出結果 家人推薦,或者安排 這個缺乏了,乙個體驗社會的過程 老師推薦 好壞參差不齊,但是他在這個專業的人脈不可否定 同學介紹 這個我不喜歡,有人而異 應聘需要考慮的問題 前途 這個方面發...