2009-12-29 61 views
2

我正在製作一個小型庫,它將基本上將程序的標準輸出(如printf())捕獲到一個單獨的進程/線程中......此過程應該執行某些任務(可以說寫這些捕獲輸出到一個文件)...我剛開始做嚴肅的C編程,所以我仍然在學習。捕獲程序輸出

我想知道什麼是最好的方式來做到這一點,我的意思是使用進程或線程...我如何捕獲這些printf()語句...此庫也必須處理任何子進程,如果產生程序...一般的假設是使用它的程序是一個線程化的程序,所以我應該採取什麼樣的方法。

回答

0

從另一個程序捕獲STDOUT的最簡單方法是將其簡單地通過命令行「>」或「|」運算符管理到程序的STDIN中。所以基本上,在你的C庫中,你應該從STDIN中用scanf,或者GET,或者你正在使用的任何STDIN函數來讀取。

這是Unix/Linux世界中的一個非常標準的約定 - 從STDIN讀取程序並以某種格式良好的方式寫入STDOUT,以便通過簡單地將命令行添加到管道來將不同的程序集中在一起:

grep "somestring" file1 file2 file3 | cut -d, -f1 | sort | uniq 
+0

not'gets()';切勿使用'gets()',而應使用'fgets()'。 – pmg 2009-12-30 09:05:53

4

如果您希望程序或庫啓動程序並捕獲其輸出,請參閱popen(3)。它會給你一個FILE指針,你可以在這裏讀取程序的輸出。