IPC概述
- 進(jìn)程間通信(Inter-Process Communication,IPC)目的有數(shù)據(jù)傳輸盐茎,多進(jìn)程同步排龄,發(fā)送控制信息等。
-
在不同場(chǎng)合下使用的進(jìn)程間通信機(jī)制如下圖
圖片來(lái)自黃茹老師主編的《linux環(huán)境高級(jí)程序設(shè)計(jì)》
System V IPC
圖片來(lái)自黃茹老師主編的《linux環(huán)境高級(jí)程序設(shè)計(jì)》
- shell中對(duì)System V IPC資源的使用情況顯示和對(duì)資源的管理
查看System V IPC資源:ipcs
查看共享內(nèi)存:ipcs -m
刪除共享內(nèi)存:ipcrm -m shmid
查看信號(hào)量:ipcs -s
刪除信號(hào)量:ipcrm -s semid
查看消息隊(duì)列:ipcs -q
刪除消息隊(duì)列:ipcrm -q queueid
IPC的標(biāo)識(shí)符和鍵值
- 各自調(diào)用get函數(shù),如
seg_id = shmget(SHM_KEY,1024,IPC_CREAT|0777);
通過(guò)約定的鍵值(KEY)來(lái)返回一個(gè)標(biāo)識(shí)符(ID) - ID可以看做IPC對(duì)象的內(nèi)部名
- KEY可以看做是IPC對(duì)象的外部名
ftok函數(shù)
ftok的作用將多個(gè)進(jìn)程認(rèn)定的同一個(gè)路徑名和項(xiàng)目ID(0~255的字符值)轉(zhuǎn)換為一個(gè)鍵值
#include <sys/ipc.h>
key_t ftok(char * path,int id);
參數(shù)表:
path:路徑名
id:項(xiàng)目ID
返回值:
大于-1:成功
-1:失敗
key = ftok(".",512);
seg_id = shmget(key,IPC_CREAT|0777)橄教;