無名管道(pipe)通訊

2021-08-20 06:48:19 字數 879 閱讀 4067

這個程式用無名管道實現命令 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...