管道:
有名管道:任意兩個程序之間通訊mkfifo
無名管道:父子程序之間通訊pipe
寫入管道的資料放在**?資料在記憶體中
通訊方式:半雙工(單工,半雙工,全雙工)
實現:讀完才能覆蓋
程式中:管道有固定的讀端和寫端
無名管道:
管道是基於檔案描述符的通訊方式,當乙個管道建立時,它會建立兩個檔案描述符fd[0]和fd[1],其中fd[0]固定用於讀管道,而fd[1]固定用於寫管道。
有名管道:
同上管道為空,讀read會阻塞
管道為滿,寫write會阻塞
操作管道時,要求讀端和寫端必須都存在
寫端關閉,讀read()直接返回,返回值0
讀端關閉,寫write()產生異常,收到sigpipe訊號
訊號量:特殊的變數,
1.建立訊號量semget
int semget(key_t key, int nsems, int sem***);
2.改變訊號量值semop
訊號量操作是pv 操作,「互斥」與「同步」
int semop(int semid, struct sembuf *sops, unsigned nsops);
3.控制訊號量semctrl
int semctl(int semid, int semnum, int cmd, ...);
p,v操作:
p操作,原子減一,獲取資源
v操作,原子加一,釋放資源
訊號量是用來同步程序的
二值訊號量 值取0 或者1
計數訊號量 值可以大於1
臨界資源:同一時間只允許乙個(有限個(試衣間))程序(執行緒)訪問的資源
臨界區:訪問臨界資源的**段
程序間通訊(管道 共享記憶體 訊息佇列 訊號量)
匿名管道 什麼是匿名管道?如何建立匿名管道 成功 返回0 失敗 返回 1 pipefd 0 從管道讀取資料 pipefd 1 向管道寫入資料 舉例 include include intmain pid t pid fork if pid 0 else if pid 0 else read pipe...
程序間通訊 訊號量
ipc識別符號和關鍵字 在終端輸入ipcs,可以看到目前系統中所有的ipc資訊 第一列的key就是ipc的關鍵字,第二列是ipc的識別符號。ftok 函式用於獲得乙個ipc的關鍵字,其函式原型是 key t ftok const char pathname,int proj id 下面是乙個訊號量的...
程序間通訊 訊號量
system ipc中,對於每乙個新建的訊號量 訊息佇列 共享記憶體,都有乙個在整個系統中唯一的識別符號。每個標識也都有唯一對應的關鍵字,關鍵字的資料型別為ket t 在終端輸入命令 ipcs 可以看到目前系統中所有的ipc資訊 共享記憶體段 鍵 shmid 擁有者 許可權 位元組 nattch 狀...