管道是unix中最古老的程序間通訊的形式。 我們把從乙個程序連線到另乙個程序的乙個資料流稱為乙個「管道」 我們通常把是把乙個程序的輸出連線或「管接」(經過管道來連線)到另乙個程序的輸入。
管道是半雙工的,資料只能向乙個方向流動;需要雙方通訊時,需要建立起兩個管道 只能用於父子程序或者兄弟程序之間(具有親緣關係的程序)進行通訊;通常,乙個管道由乙個程序建立,然後該程序呼叫fork,此後父、子程序之間就可應用該管道。
包含標頭檔案功能:建立一無名管道 原型
int pipe(int file_descriptor[2]);
引數 file_descriptor:檔案描述符陣列,其中file_descriptor[0]表示讀端,file_descriptor[1]表示寫端 返回值:成功返回0,失敗返回錯誤**
示例**:
#include#include#include#include#includeint main(int argc,char *argv)
; int fid = fork();
if(fid > 0)
else if(fid == 0)
else
return 0;
}
列印結果
管道讀寫規則:如果試圖從管道寫端讀取資料,或者向管道讀端寫入資料都將導致錯誤發生 當沒有資料可讀時,read呼叫就會阻塞,即程序暫停執行,一直等到有資料來到為止。 如果管道的另一端已經被關閉,也就是沒有程序開啟這個管道並向它寫資料時,read呼叫就會阻塞
#include#include#include#includeint main()
列印結果:
1為輸入到終端
原理通過把發的fd[1]寫複製到shell的1(標準輸入),fd[0]複製到shell的2(標準輸出)
以下是**:
#include#include#include#include#include#includeint main()
; pipe(fd);
int pid = fork();
if(pid > 0)
else if(pid == 0)
else
return 0;
}
實現結果:
作用:允許乙個程式把另外乙個程式當作乙個新的程序來啟 動,並能對它傳送資料或接收資料
file* popen(const char *command, const char *open_mode);
command:待執行程式的名字和相應的引數 open_mode:必須是「r」或「w」 如果操作失敗,popen會返回乙個空指標
以下**:
#include#include#include#include#include#includeint main()
; fread(buf,1,1024,file);
fclose(file);
file *wcfile = popen("wc","w");
fwrite(buf,1,strlen(buf),wcfile);
fclose(wcfile);
return 0;
}
**結果:
我們首先要知道命名管道,要讀段和寫段同時開啟,才能向檔案讀寫資料。
貼上**來理解命名管道的規則
首先是讀端:
#include#include#include#include#include#includeint main(int argc,char *argv)
接下來是寫端:
#include#include#include#include#include#includevoid handle(int signo)
int main(int argc,char *argv)
}
執行寫端:
它在等待另一端的開啟,才能向裡面寫入資料
此時我們開啟讀端:
馬上可以看到寫段可以寫資料
而執行5秒後,我們可以看到寫的時候返回-1,並且獲取到管道破裂的資訊(sigpipe)
所以這裡就是我們所注意的點,當我們寫客戶端和伺服器進行管道傳輸的時候,如果客戶端一旦退出來,就會使管道破裂,所以我們必須通過捕捉訊號,來避免這種事情發生。
關於管道的理解 Linux篇
首先,對於程序之間的通訊,一共有三種方式 管道 pipe fifo mmp對映 管道是一種兩個程序間進行單向通訊的機制。因為管道傳遞資料的單向性,管道又稱為半雙工管道。管道的這一特點決定了器使用的侷限性。管道是linux支援的最初unix ipc形式之一,具有以下特點 資料只能由乙個程序流向另乙個程...
linux管道(無名管道)
首先管道是程序之間的乙個單向資料流,它的資料流向由核心管理,只能從乙個程序流向另外乙個程序,乙個程序向管道寫入資料,另外乙個程序從這個管道讀取資料。在使用管道 無名管道 時,只能用在父子程序或者親屬程序之間,若要用在任意程序之間則需要使用fifo 有名管道 如圖程序ab通過管道進行資料交換。程序a通...
Linux管道(無名管道)
是一套免費使用和自由傳播的類unix作業系統,是乙個基於posix和unix的多使用者 多工 支援多執行緒和多cpu的作業系統。它能執行主要的unix工具軟體 應用程式和網路協議。它支援32位和64位硬體。linux繼承了unix以網路為核心的設計思想,是乙個效能穩定的多使用者網路作業系統。它主要用...