首先管道是程序之間的乙個單向資料流,它的資料流向由核心管理,只能從乙個程序流向另外乙個程序,乙個程序向管道寫入資料,另外乙個程序從這個管道讀取資料。
在使用管道(無名管道)時,只能用在父子程序或者親屬程序之間,若要用在任意程序之間則需要使用fifo(有名管道)
如圖程序ab通過管道進行資料交換。程序a通過管道的「寫端」往管道裡面寫入資料,程序b通過「讀端」從管道裡面讀取資料。
而在系統呼叫的時候,管道的讀端和寫端就以檔案的方式呈現給我們,通過pipe()函式建立管道,我們可以得到讀端檔案和寫端檔案的fd,然後和檔案程式設計一樣通過read,write就可以實現讀取寫入資料。但與檔案程式設計稍許不同就是,檔案程式設計後檔案的內容還存在,但是使用管道讀取後,管道裡的相應內容就消失了。
現在就來實現乙個父程序通過管道寫資料,子程序通過管道讀資料的程式
1.建立管道 pipe()
2.建立子程序 fork()
3.對讀端檔案,寫端檔案進行檔案程式設計 read(), write()
#include
#include
#include
#include
#include
#include
void main()
else
} 顯示結果為
父子程序資料
Linux管道(無名管道)
是一套免費使用和自由傳播的類unix作業系統,是乙個基於posix和unix的多使用者 多工 支援多執行緒和多cpu的作業系統。它能執行主要的unix工具軟體 應用程式和網路協議。它支援32位和64位硬體。linux繼承了unix以網路為核心的設計思想,是乙個效能穩定的多使用者網路作業系統。它主要用...
無名管道和有名管道
無名管道 無名管道建立 int pipe int filedis 2 當乙個管道建立時,它會建立兩個檔案描述符 filedis 0 用於讀管道,filedis 1 用於寫管道 管道用於不同程序間通訊。通常先建立乙個管道,再通過fork函式建立乙個子程序,該子程序會繼承父程序所建立的管道 有名管道 有...
管道 無名管道 和FIFO 有名管道
管道是最初的unixipc形式,但是因為管道沒有名字,所以它們只能用於有親緣關係的程序使用 進而有名管道 fifo 應運而生,有名管道有乙個路徑名與之關聯,所以允許無親緣關係的程序訪問同乙個fifo。以下具體介紹管道 管道的建立 管道由函式 int pipe int fd 2 建立,提供乙個單向資料...