先來看看下面的這張圖:
當進行i/o重定向時,只是將不同程序表的不同fd指向同一檔案表結構。
關於i/o重定向,要用到以下的重要函式:
int dup( int oldfd );利用函式dup,我們可以複製乙個描述符。傳給該函式乙個既有的描述符,它就會返回乙個新的描述符,這個新的描述符是傳給它的描述符的拷貝,即他們將共享同乙個檔案表。int dup2( int oldfd, int targetfd )
而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。重定向 顧名思義就是將標準的輸入和輸出位置重新定向 覆蓋重定向 每一次的輸出都要覆蓋原始檔中的內...