2009-09-14 113 views
0

我終於弄清楚如何獲得標準輸入和標準輸出到主應用程序和使用CreateProcess(win32)或exec(linux)創建的進程之間的管道。現在我對利用應用程序的管道特性感興趣。我正在應用程序可以通過管道輸送到:管道使用C++處理

eg: cat file.txt | grep "a" 

如果我想運行的「grep」,送「file.txt的」給它的內容(我在我的C++應用程序的緩衝區),我該怎麼做呢?我假設我不只是把它抽掉,或者我錯了。那是我做的嗎?

+0

爲了提高效率和一般的巧妙,跳過「貓」並重定向grep的stdin從文件中讀取:grep「a」 2009-09-14 02:47:53

回答

1

是的,這正是你所做的:從stdin讀取並寫入stdout

Linux背後的天才之一是簡單的重定向輸入和輸出幾乎毫不費力,只要你的應用服從一些非常簡單的基本規則。例如:將數據發送至stdout,並將錯誤或信息消息發送至stderr。這使得用戶可以輕鬆跟蹤狀態,並且仍然可以使用您的應用將數據發送到管道。

您也可以重定向(從stdout)數據和消息(來自stderr)獨立:

myapp | tail -n 5 > myapp.data # Save the last 5 lines, display msgs 
myapp 2> myapp.err | sort  # Sort the output, send msgs to a file 
myapp 2> /dev/null    # Throw msgs away, display output 
myapp > myapp.out 2>&1   # Send all output (incl. msgs) to a file 

重定向可能在第一有點混亂,但你會發現所花的時間學習將是非常值得它!