具有兩個對外埠,乙個稱為讀端,乙個稱為寫端。乙個程序在管道的寫端寫資料,另乙個程序從管道的讀端讀取資料。
管道僅侷限於父程序與子程序之間的通訊。
管道通訊的特點:
1.管道通訊是單向的,有固定的讀端和寫端。
2. 資料被程序從管道讀出後,在管道中該資料就不存在了。
3. 當程序去讀取空管道的時候,程序阻塞。
4. 當程序往滿管道寫資料時,程序阻塞。
5. 系統常量pipe_buf規定了核心的管道緩衝區大小。
與無名管道最大的區別就是可用於任意兩個程序間通訊。
當open乙個fifo時,非阻塞標誌(o_nonblock)會產生如下影響:
1、一般情況下(沒有指定o_nonblock),唯讀open要阻塞到某個其他程序為寫而開啟這個fifo為止。類似的,只寫open要阻塞到某個其他程序為讀而開啟它為止。
2、如果指定了o_nonblock,則唯讀open立即返回。但是,如果沒有程序為讀而開啟乙個fifo,那麼只寫open將返回-1,並將errno設定成enxio。
訊息佇列是訊息的鍊錶,儲存在核心中,由訊息佇列識別符號標識。其讀寫原則符合佇列的先進先出原則。當然,這並不完全是這樣的。我們可根據訊息佇列的每一條訊息的識別符號去讀取指定的訊息。
訊號量是乙個計數器,用於為多個程序提供對共享資料的訪問,其值實則表徵有多少個共享資源單位可供共享應用。為了獲得共享資源,程序需要執行下列操作:
1、測試控制該資源的訊號量。
2、若此訊號量的值為正,則程序可以使用該資源。在這種情況下,程序會將訊號量值減1,表示他使用了乙個資源單位。
3、否則,若此訊號量的值為0,表明無可用資源,則程序進入休眠狀態,直至其他程序不再使用共享資源,訊號量的值增1,此時訊號量大於0,處於休眠的程序被喚醒。返回步驟1。
常用的訊號量形式被稱為二元訊號量,他控制單個資源,其初始值為1。
共享記憶體就是對映一段能被其他程序所訪問的記憶體,這段共享記憶體由乙個程序建立,但多個程序都可以訪問(即多個程序將同一段記憶體對映到它們的位址空間)。共享記憶體是最快的 ipc 方式,它是針對其他程序間通訊方式執行效率低而專門設計的。它往往與其他通訊機制,如訊號量、互斥量、記錄鎖等配合使用,來實現程序間的同步和通訊。
互斥量從本質上說是一把鎖,在訪問共享資源前對互斥量進行設定(加鎖),在訪問完成後釋放互斥量(解鎖);常常使用乙個整型量表示,0表示解鎖。
互斥量與訊號量的區別:
1、互斥量用於執行緒的互斥,訊號量用於執行緒的同步。
2、互斥量值只能為0/1,訊號量值可以為非
負整數。
記錄鎖
引用計數
臨界區
程序間通訊方法總結
程序間通訊方法總結 程序通常被定義為乙個正在執行的程式的例項,它由兩個部分組成 乙個是作業系統用來管理程序的核心物件。核心物件也是系統用來存放關於程序的統計資訊的地方 另乙個是位址空間,它包含所有的可執行模組或dll模組的 和資料。它還包含動態分配的空間。如執行緒堆疊和堆分配空間。每個程序被賦予它自...
程序間通訊方法初步總結
主要有如下方式 管道 訊號 訊息佇列 共享記憶體 訊號量 套接字,本文選擇幾種大概介紹,後續會對比較重要的專門發文介紹。1.管道 管道分為有名管道和匿名管道,匿名管道只能在有親緣關係的程序間通訊,有名管道克服這個缺點。值得注意的是,只有在管道有讀端時,往管道中寫資料才有意義。否則,向管道寫資料的程序...
程序間通訊方法
1 管道 pipe 管道可用於具有親緣關係程序間的通訊,允許乙個程序和另乙個與它有共同祖先的程序之間進行通訊。2 命名管道 named pipe 命名管道克服了管道沒有名字的限制,因此,除具有管道所具有的功能外,它還允許無親緣關 系 程序間的通訊。命名管道在檔案系統中有對應的檔名。命名管道通過命令m...