程序間通訊筆記 2

2021-10-20 18:43:00 字數 982 閱讀 2767

訊號量

訊號量一般配合其他方式一起使用,主要實現程序間的互斥與同步,而不是快取資料。

訊號量表示資源的數量,控制訊號量的方式有兩種原子操作:

p操作:將這個訊號量減一,減一後如果訊號量小於0代表資源已被占用程序需要阻塞等待。反之表明資源可用可以正常執行。

v操作:把訊號量加一,加一後如果訊號量大於等於0代表有阻塞的程序,於是會喚醒執行,反之代表沒有阻塞的程序。

p操作用在進入共享資源之前,v操作用在進入共享資源之後,兩個操作成對出現。

如果訊號量初始為1代表互斥訊號量,為0是同步訊號量。

訊號

對於異常情況下的工作模式需要用訊號來通知程序。訊號是程序通訊間唯一的非同步通訊方式。

socket

跨網路程序通訊就需要socket了。

針對 tcp 協議通訊的 socket 程式設計模型

服務端和客戶端初始化 socket,得到檔案描述符;

服務端呼叫 bind,將繫結在 ip 位址和埠;

服務端呼叫 listen,進行監聽;

服務端呼叫 accept,等待客戶端連線;

客戶端呼叫 connect,向伺服器端的位址和埠發起連線請求;

服務端 accept 返回用於傳輸的 socket 的檔案描述符;

客戶端呼叫 write 寫入資料;服務端呼叫 read 讀取資料;

客戶端斷開連線時,會呼叫 close,那麼服務端 read 讀取資料的時候,就會讀取到了 eof,待處理完資料後,服務端呼叫 close,表示連線關閉。

針對 udp 協議通訊的 socket 程式設計模型

服務端和客戶端初始化 socket,得到檔案描述符;

服務端和客戶端呼叫 bind,將繫結在 ip 位址和埠;

然後進行通訊;

針對本地程序間通訊的 socket 程式設計模型

繫結不是繫結位址和埠而是繫結乙個本地檔案

linux程序間通訊 筆記

用於程序間通訊,建立乙個管道,一端寫,一端讀 include intpipe int fildes 2 fides 0 讀取,fides 1 寫入 成功返回0,失敗返回 1 示例 include include include include include intmain pid t pid fo...

程序間通訊筆記(2) 管道和FIFO

管道 pipe 侷限在於沒有名字,只能用於親緣關係的程序使用。fifo 稱為有名管道 named pipe 跟套接字程式設計的套路類似,客戶 伺服器回射程式 這裡客戶從標準輸入 stdin 讀入乙個路徑名,並把它寫入ipc通道。伺服器開啟檔案,讀出其中內容,並寫入ipc通道作為對客戶的響應 客戶將伺...

程序間通訊筆記(4) SystemV 訊息佇列

systemv 訊息佇列使用訊息佇列識別符號標識,這個標識好像鍊錶中的頭節點,包含了許多資訊,當然最主要的還是指向資料節點的兩個指標msg first和msg last,分別表示訊息佇列中的第乙個和最後乙個訊息節點。操作systemv訊息佇列的函式。include include include i...