2011-08-11 121 views
2

popen() alternative從標準錯誤標準輸出上區分開管

我的問題是有關一個張貼以上。在第一/響應接受,我們正在做的:

// Child. Let's redirect its standard output to our pipe and replace process with tail 
close(pipefd[0]); 
dup2(pipefd[1], STDOUT_FILENO); 
dup2(pipefd[1], STDERR_FILENO); 

但我要的是從正規OUTPUT區分ERROR。我怎樣才能做到這一點?當我在STDERR中獲得任何東西時,我需要對它做出反應。

它沒有多大意義,但是,我可以做以下?:

int pipefd[3]  /* instead of 2 */ 

dup2(pipefd[1], STDOUT_FILENO); 
dup2(pipefd[2], STDERR_FILENO); 

我使用select看FD,看看輸出是否可用。但到現在爲止,我只需要看1fd,現在我必須看看2.

注意:管道只能有2個端點,對嗎?一個寫信給其他人閱讀。我怎樣才能容納這第三端:D?

回答

3

您需要創建兩個獨立的管道並分別讀取每個管道。不應該很難,因爲你已經有了select()。

+0

謝謝!有點有道理。感謝你的幫助。 – hari

+1

工作得很好!當我現在考慮這個問題時,這個問題本身有點「跛腳」,但我想我很笨,所以它允許:D!非常感激。 – hari

相關問題