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 作為一名應屆生,什麼方式比較的好 校招 同類一起比較,比較容易出結果 家人推薦,或者安排 這個缺乏了,乙個體驗社會的過程 老師推薦 好壞參差不齊,但是他在這個專業的人脈不可否定 同學介紹 這個我不喜歡,有人而異 應聘需要考慮的問題 前途 這個方面發...