Linux程式設計 管道

2021-07-23 22:30:28 字數 820 閱讀 7556

什麼是管道

程序管道

pclose函式

pipe呼叫

父程序和子程序

管道關閉之後的讀操作

對於管道,通常不知道有多少資料可以讀,往往採用輪詢的方式。當沒有資料可以讀時,read呼叫將被堵塞。如果管道的另一端關閉時,read呼叫返回的是0而不是堵塞。fork產生的子程序也會使用者和父程序相同的一對管道描述符,所以在父子程序使用管道通訊時,要提前關閉對應的一端管道描述符。

使用管道重定向標準輸入

命名管道

訪問fifo檔案

對fifo進行讀寫操作

對於乙個空的、堵塞的fifo的read呼叫將等待,直到有資料可以讀時才進行執行。與此相反,對乙個空的、非堵塞的fifo的read呼叫將立刻返回0位元組。

對於乙個完全堵塞fifo的write呼叫將等待,直到資料可以被寫入(即管道的另一端被開啟時)才可以繼續執行。

提供的程式兩個程式使用的都是阻塞模式的fifo。我們首先啟動寫程序(以寫堵塞的方式開啟管道),它將堵塞以等待讀程序開啟這個fifo。讀程序啟動後,寫程序解除堵塞並開始向管道寫資料。同時,讀程序也開始從管道中讀取資料。

小結本章中,我們介紹了如何使用管道在程序之間傳遞資料。首先,介紹了通過popen或pipe呼叫建立的未命名管道,並且討論了如何使用管道和dup呼叫把管道作為標準輸入。接下來,我們介紹了命名管道以及如何在不相關的程式之間傳遞資料。最後,實現了乙個簡單的客戶/伺服器例子,fifo的使用不僅提供了程序間的同步(只要保證所有的寫請求是發往乙個阻塞的fifo的,並且每個寫請求的資料長度小於等於pipe_buf位元組,系統就可確保資料不會交錯在一起),還提供了雙向的資料流。

linux管道程式設計

一 利用管道獲取子程序的輸出 include int main while ret fread buf,1,1023,pp 0 fprintf stdout,n pclose pp return 0 二 利用管道向子程序的輸入資料 沒有想到好的命令,自己寫了如下乙個test程式,該程式從stdin讀...

Linux有名管道程式設計

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

Linux管道程式設計例項

管道 可以把管道想象為兩個實體之間的單向聯結器。注意,管道是半雙工的,如果需要全雙工通訊,應該轉而考慮套接字。匿名管道又稱管道,提供了乙個程序與它的兄弟程序通訊的方法,只存在于父程序中 命名管道,可以存在與檔案系統中,任意程序都可找到它,使得不同先祖的程序也可以通訊。include int pipe...