重定向dup 管道 程序間通訊

2021-06-22 05:13:54 字數 1214 閱讀 1962

先來看看下面的這張圖:

當進行i/o重定向時,只是將不同程序表的不同fd指向同一檔案表結構。

關於i/o重定向,要用到以下的重要函式:

int dup( int oldfd );

int dup2( int oldfd, int targetfd )

利用函式dup,我們可以複製乙個描述符。傳給該函式乙個既有的描述符,它就會返回乙個新的描述符,這個新的描述符是傳給它的描述符的拷貝,即他們將共享同乙個檔案表。

而dup2,則會複製oldfd所指向的檔案表結構到targetfd所指向的檔案表結構,這樣就使targetfd重定向到oldfd了,並且是指向oldfd所指的檔案表結構的。

下面的程式就是利用管道及重定向來進行2個程序間的通訊的。

在父程序中建立了2個子程序a、b,並在父程序中建立了管道a_to_b[2],

為此,首先在子程序a中將其標準輸出重定向管道的寫端a_to_b[1],然後在子程序b中將管道的讀端a_to_b[0]重定向到b的標準輸入,如此即可。

下面是**:

int a_to_b[2];//儲存管道描述符

if(pipe(a_to_b)<0)//建立管道

if(fork()==0){//這是子程序1

close(a_to_b[0]);//關閉讀端

if(dup2(a_to_b[1],stdout_fileno)!=stdout_fileno){//子程序1的輸出重定向管道的輸入

printf("重定向失敗!");

exit(0…………………………………………………………………………

管道重定向與程序間通訊

先來看看下面的這張圖 當進行i o重定向時,只是將不同程序表的不同fd指向同一檔案表結構。關於i o重定向,要用到以下的重要函式 int dup int oldfd int dup2 int oldfd,int targetfd 利用函式dup,我們可以複製乙個描述符。傳給該函式乙個既有的描述符,它...

程序間通訊二 管道技術之輸入輸出重定向

自 本篇將介紹輸入輸出的重定向問題,先來看乙個小小的例項,設有乙個程式,該程式的輸入輸出為標準輸入輸出即從鍵盤上輸入,輸出到螢幕。現在要重定向輸入法輸出,使程式從檔案中讀取資料,處理後輸出到檔案。程式 如下 稱此程式為示例程式 cpp view plain copy include intmain ...

重定向 管道

1 輸入輸出重定向可分為 標準輸入 由鍵盤輸入 標準輸出 由監視器輸出 錯誤輸出 與標準輸出相同,但是他們是具有各自的資料流,各佔乙個資料流 通常用識別符號對位 標準輸入用0,標準輸出用1,錯誤輸出用2。重定向 顧名思義就是將標準的輸入和輸出位置重新定向 覆蓋重定向 每一次的輸出都要覆蓋原始檔中的內...