管道重定向與程序間通訊

2021-06-05 08:31:35 字數 749 閱讀 9828

先來看看下面的這張圖:

當進行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的輸出做為程序b的輸入 。

為此,首先在子程序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)

close(a_to_b[1]);

execvp(cmd_a->exe_path,cmd_a->argv);

}if(fork()==0)

else

重定向dup 管道 程序間通訊

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

管道與重定向

目錄 重定向 轉換和刪除字元 tr 從檔案中匯入 stdin 把多行傳送給 stdin 管道 重定向到多個目標 先說什麼是標準輸入輸出,我們從鍵盤上敲擊,然後輸入到我們的電腦中,這是標準的輸入,那麼什麼是標準輸出呢,我們在經過一系列正確的操作得到的能在螢幕上顯示出來的輸出是標準輸出。那不正確的操作產...

管道與》重定向

命令 可以將乙個命令的輸出作為另乙個命令的輸入。rpm qa grep licq 這條命令使用乙個管道符 建立了乙個管道。管道將rpm qa命令的輸出 包括系統中所有安裝的rpm包 作為grep命令的輸入,從而列出帶有licq字元的rpm包來。命令 提供了兩個程序之間通訊的途徑。表示將結果輸入到乙個...