程序間通訊 有名管道(FIFO)

2021-08-09 12:36:17 字數 965 閱讀 1831

1、何謂程序間通訊?

多個程序之間資料相互交換稱為程序間通訊。

2、程序間通訊的方式都有哪些?

(1)訊號

(2)管道

(3)訊號量

(4)訊息佇列

(5)共享儲存(共享記憶體)

(6)套接字

訊號在之前的部落格已經講過了,今天重點是說一下管道中的有名管道。

3、管道

管道分為兩種:

(1)半雙工通訊:半雙工通訊是指通訊雙方都能收發訊息,但不能同時進行收和發的工作方式。

(2)全雙工通訊:全雙工通訊是指通訊雙方可同時收發訊息的工作方式。

4、管道原理

從圖中可以看出,a、b兩個程序中,a程序向管道中寫資料,b程序從管道中讀資料,這也就是管道的原理。

5、管道操作

(1)有名管道:應用於任意兩個程序之間資料的單向傳遞。

建立: 命令方式mkfifo、函式方式mkfifo()

開啟: open

寫資料:write

讀資料:read

關閉: close

(2)有名管道:在檔案目錄樹中有乙個檔案標示(管道檔案),實際不佔磁碟空間,資料快取在記憶體上。

(3)阻塞執行函式:函式呼叫以後不會立即返回,需要等待某些條件的發生才會返回。open操作管道檔案時,阻塞執行的函式。

如果乙個程序以只寫方式開啟乙個管道檔案,open會阻塞執行,直到有乙個程序以唯讀方式開啟管道檔案,open才會返回,程序才會接著執行。

如果乙個程序以唯讀方式開啟乙個管道檔案,open會阻塞執行,直到有乙個程序以只寫方式開啟管道檔案,open才會返回,程序才會接著執行。

read函式也會阻塞執行,知道寫端寫入資料或者所有的寫端都關閉。

read讀取資料並且會將記憶體上的已讀資料清空。

程序間通訊 有名管道(FIFO)

有名管道也被稱為fifo檔案,是一種特殊的檔案。由於linux所有的事物都可以被視為檔案,所以對命名管道的使用也就變得與檔案操作非常統一。用如下兩個函式中的其中乙個,可以建立命名管道。include include int mkfifo const char filename,mode t mode...

七 程序間通訊 FIFO 有名管道

我們向管道中寫入資料時,linux將不保證寫入的原子性,管道緩衝區一有空閒區域,寫程序就會試圖相關到中寫入資料。如果杜金城不讀走管道緩衝區的資料,那麼寫操作將會一直阻塞。只有讀端存下的時候,向管道中寫資料才有意義。否則相關到中寫入資料的程序將受到核心傳來的sifpipe,我們可以通過這個訊號來判斷讀...

Linux程序間通訊 有名管道FIFO

常規的匿名管道通過pipe建立一片記憶體緩衝區,並對外提供兩個檔案描述符,用於唯讀或者只寫操作。但其使用範圍很小,只能用於父 子程序間的通訊。因此linux還提供有名管道的支援。管道的本質是一片可以讀寫的緩衝區域,linux將其描述為檔案 unix思想 一切io皆是檔案 對於有名管道,其主要特點是 ...