這個程式用無名管道實現命令 cat /etc/passwd | grep root
其實在終端命令中 | 就是乙個管道 cat /etc/passwd會把結果列印到標準輸出 ,grep root 會把結果從標準輸入
實現流程:
1.父程序生產兩個子程序(程序扇的概念)
2.子程序a:
a: 把標準輸出定位到管道寫端,因為此時cat /etc/passwd的結果原本要輸出到標準輸出,這裡我們必須定位到管道寫段,相
當與執行cat /etc/passwd後就往管道寫入了資料
b: 呼叫execvp執行 cat /etc/passwd命令
3.子程序b:
a: 把標準輸入重定向到管道讀端,因為原本 grep root 會從標準輸入讀取資料,這裡需要重定向到管道讀端去讀取資料
b: 呼叫execvp執行 grep root 從管道讀端讀取資料,並顯示在標準輸出上
其原始碼如下:
#include
#include
#include
char *cmd1[3]=;
char *cmd2[3]=;
int main(void)
int i=0;
pid_t pid;
for(;i<2;i++)
else if(pid==0)
if(execvp(cmd1[0],cmd1)<0)
break;
}if(i==1)
if(execvp(cmd2[0],cmd2)<0)
break;} }
else}}
return 0;
其實驗結果如下:
root:x:0:0:root:/root:/bin/bash
無名管道pipe
管道是unix系統ipc的最古老形式,所有的unix系統都支援這種通訊機制。有兩個侷限性 1 支援半雙工 2 只有具有親緣關係的程序之間才能使用這種無名管道 pipe函式 功能 建立無名管道 函式原型 include int pipe int filedes 2 引數經由引數filedes返回兩個檔...
程序間通訊 無名管道PIPE
無名管道pipe 僅在記憶體中存在,檔案系統不可見 無名 有名 管道 管道是一種程序間通訊機制,好比乙個管子,一邊乙個口,乙個往裡放,另一頭可以往出取,操作是雙向的 無名管道特點 只能用於有親緣關係的近緣之間的通訊 單工的通訊模式,具有固定的讀端和寫段 無名管道建立時會返回兩個檔案描述符,分別用於讀...
1 程序間通訊 PIPE(無名管道)
1 在子程序中寫入資料,在父程序中讀取資料 code 結果 now,write data to the pipe the data i wrote is jason s messag now read data from pipe the data from pipe is jason s mess...