有名管道管道程式設計

2021-07-11 15:21:53 字數 2674 閱讀 4103

linux程序和程序之間有多種通訊方式。linux程序間通訊的主要方式有:

1、  無名管道

2、  有名管道

3、  訊號

4、  訊息佇列

5、  共享記憶體

6、  訊號量

7、  套接字

管道操作是比較簡單的通訊方式,乙個程序往管道中寫入資料,另乙個程序從管道中讀出資料。管道包括無名管道和有名管道。前者只能用於父程序和子程序間的通訊,後者可用於任意兩個程序之間。

有名管道又稱為fifo檔案,有名管道一旦建立完成後,linux會建立乙個檔案,對檔案進行讀寫,程序間就進行資料的通訊了。

fifo檔案和普通檔案有些區別:

1、  讀取fifo檔案的程序只能以rdonly的方式開啟

2、  寫fifo檔案的程序只能以wronly的方式開啟

3、  fifo檔案裡面的內容被讀取後,就消失了,但是普通檔案裡面的內容不會讀取後就消失了

對於有名管道的學習,還是用函式,不過重點是兩個函式,乙個是建立管道,乙個是刪除管道。因為管道是對應檔案,所以對於管道的操作是對檔案的操作,使用的方法和對檔案操作的方法一致。

5.2 建立有名管道

5.2.1 函式名

mkfifo

5.2.2 函式原形

int mkfifo(const char *pathname, mode_t mode)

5.2.3 函式功能

建立有名管道(fifo檔案)

5.2.4 所屬標頭檔案

5.2.5 返回值

成功:fifo檔案的檔案描述符

失敗: -1

5.2.6 引數說明

pathname: 要建立的fifo的檔名(帶路徑)

mode: 建立的檔案的許可權

0777: rwxrwxrwx

0666: rw-rw-rw-

5.3 刪除有名管道

5.3.1 函式名

unlink

5.3.2 函式原形

int unlink(const char *pathname)

5.3.3 函式功能

刪除檔案(包括fifo檔案)

5.3.4 所屬標頭檔案

5.3.5 返回值

成功:0

失敗:-1

5.3.6 引數說明

pathname: 要刪除的fifo的檔名(帶路徑)

下面,就要用寫**來學習有名管道程式設計。

編寫兩個程式,乙個程式負責建立有名管道,並往有名管道中寫資料,另乙個程式負責讀取有名管道資料,並刪除有名管道。

對應寫程序:

執行程式

可以看到,程式被阻塞掉了,因為程式在等待其他程序讀取fifo檔案內容。在目錄下多乙個fifo.txt的檔案,這個就是建立的fifo檔案。檢視這個檔案,裡面就有寫入的資料。

對於讀程序:

執行程式:

寫程序執行結束,因為有程序從fifo檔案中讀取資料,寫程序不再被阻塞。讀程序讀取fifo檔案資料成功。

下面改一下讀程序的**,讀完資料後,不刪除fifo檔案。

執行程式:

發現,fifo檔案沒有被刪除掉。但是檔案中,已經沒有內容了,因為被讀走了。

Linux有名管道程式設計

有名管道可以用於任何兩個程式間通訊,因為有名字可引用。注意管道都是單向的,因此雙方通訊需要兩個管道。下面分別是這兩個程式 同樣是lucy先執行,然後是peter。fifolucy.c include include include include include include include in...

管道及有名管道

管道和有名管道是最早的程序間通訊機制之一,管道可用於具有親緣關係程序間的通訊,有名管道克服了管道沒有名字的限制,因此,除具有管道所具有的功能外,它還允許無親緣關係程序間的通訊。認清管道和有名管道的讀寫規則是在程式中應用它們的關鍵,本文在詳細討論了管道和有名管道的通訊機制的基礎上,用例項對其讀寫規則進...

無名管道和有名管道

無名管道 無名管道建立 int pipe int filedis 2 當乙個管道建立時,它會建立兩個檔案描述符 filedis 0 用於讀管道,filedis 1 用於寫管道 管道用於不同程序間通訊。通常先建立乙個管道,再通過fork函式建立乙個子程序,該子程序會繼承父程序所建立的管道 有名管道 有...