程序之間的通訊之管道

2021-08-09 17:57:17 字數 1009 閱讀 5381

管道的整體(有名、無名)概念:我們通常把乙個程序的輸出通過一塊記憶體連線到另外乙個程序的輸入。

特徵:

1.半雙工通訊方式,同一時刻資料只能單向流動。

2.類似於資料結構中的佇列,遵循先進先出的原則。

3.管道中的資料具有一次性,一旦被讀走,將被從管道中移除。

4.沒有具體的檔名標識,所以只能在父子程序中通訊。

5.管道所傳送的資料是無格式的,這要求管道的讀出方與寫入方必須事先約定好資料的格式,如多少位元組算乙個訊息等

下面用圖示解釋它的建立以及使用:

概念上面已經說過。

特徵:1.有名管道有檔名作為識別符號,所以可在任意兩個程序之間進行通訊

2.建立管道有兩種形式:一 ,是在命令視窗使用mkfifo 管道名 二,是**中呼叫系統函式mkfifio();之後的操作就把管道看作檔案,使用檔案操作就好開啟: open 寫資料:write 讀資料:read 關閉:close

3.管道的各個介面會進行阻塞,例如:

如果乙個程序以只寫開啟乙個管道,而沒有程序對這個管道進行讀的許可權開啟,open就會阻塞到此處。知道有另乙個程序以寫的許可權開啟後,open才會執行下去。

read也會阻塞執行。如果其他程序沒有給管道寫入資料 ,read就會阻塞直至其他程序給管道內寫入資料。如果當乙個程序以寫方式開啟管道後,關閉了管道的寫端,或者直接結束掉了程序,read不會阻塞,而是會直接返回0。

write雖然也會阻塞執行,但阻塞條件比較難達成,就是管道寫滿的情況。

管道的大小具體是多少。我們可以簡單來測一下。

程序之間通訊 無名管道

程序之間常用的通訊方式有 1 無名管道 具有親緣關係的父子程序 2 有名管道 任意兩個程序 3 訊號 4 訊息佇列 5 記憶體共享 6 訊號量 一般是程序之間同步的手段,一般配合互斥鎖 條件變數一起使用 7 socket套接字 現在介紹最簡單的無名管道,用到的api函式如下 比較簡單,我們可以定義乙...

程序之間的通訊 有名管道和無名管道

四 程序之間的通訊。1 為什麼要學習程序之間的通訊?例如 1 開啟了乙個名字為1的程序。2 開啟了乙個名字為2的程序。通過學習程序之間的通訊,使得不同的程序之間都是可以實現資料的交換。例如程序1傳送資料給程序2,程序2收到資料之後,根據資料來做不同的事情。間接地實現程序1控制程序2 2 在linux...

匿名管道實現父子程序之間的通訊

匿名管道 匿名管道可以實現父子程序的通訊,乙個由另乙個程序呼叫createprocess函式建立的程序稱為子程序 我們在利用createpipe建立你民管道的時候會獲得管道的讀寫控制代碼 子程序可以繼承這個控制代碼 在父程序通過 createpipe函式獲得控制代碼可以對匿名管道進行讀寫操作 在子程...