2010-08-04 103 views
3

這是我的問題。我正在爲C中的一個項目開發一個單元測試類。單元測試類很好用,但是它正在測試的一種方法是從API調用一個Method來與一個硬件進行通信。由於硬件關閉了軟件,在運行我的測試時,我確實無法讓它運行,而且由於測試的黑盒特性,我不需要這樣做。如何捕捉c中的所有輸出文本

這些調用只是發送到硬件的char *消息,當運行我的測試時,我只是得到了很多「無法與API通信」的打印輸出。我假設它是API的一部分錯誤檢查。

我的問題是,爲了輸出漂亮,有沒有辦法在這種情況下捕獲,壓縮或檢查所有到達終端的文本(這就是輸出流是正確的嗎?我對C很新穎)

+1

請參閱[嵌入式C的測試驅動開發]一書(http://pragprog.com/book/jgade/test-driven-development-for-embedded-c)。它廣泛討論瞭如何處理這些問題。 – 2012-06-15 14:29:03

回答

0

我假設你正在從shell運行程序,在這種情況下,使用>將輸出發送到文件中。請參閱bash manual page

否則,我需要更多信息。

+0

請注意,'>'(或'1>')只能重定向stdout。如果你還想重定向stderr,你還需要'2>' – moooeeeep 2012-06-15 08:17:43

+0

@moooeeeep - 同意 - 但你可以用bash做其他奇妙的事情。這就是爲什麼我給了鏈接。 – 2012-06-15 08:36:13

+0

您可以更好地鏈接到[本文](http://tldp.org/LDP/abs/html/io-redirection.html)。手冊頁在這方面並不十分詳細。 – moooeeeep 2012-06-15 10:19:51

2

如果您鏈接生成這些消息的代碼,那麼也可以在標準輸出(或stderr)上調用freopen()。不幸的是,你會重定向所有程序的輸出。

可能可以保留原始stdout的句柄,創建管道,調用freopen()將stdout重定向到管道的一側,並從另一側讀取線程,過濾輸出並傳遞「good 「消息通過原始標準輸出。

0

如果我正確理解你的問題,假設你從某種shell(bash或其他)啓動你的應用程序並看到printf進入shell提示符。而你想將它們保存到一個文件中。

那麼,簡單的方法是使用script命令。

您執行以下操作。

~> script appOutputlog.log 

~> ./app.exe 

一旦完成,無論是因爲應用程序已完成,或者您已完成記錄日誌。 U可以使用Ctrl + DCtrl + C來退出腳本命令。並且您將在本地目錄中擁有appOutputlog.log文件以及在shell命令提示符處打印的所有日誌。

2其他解決方法是使用fopen後跟fprintf而不是正常printf s。

3另一種解決方案是將您的過程連接到在您的系統上運行的syslogd。這是收集日誌的最標準和生產方式之一。 syslogd是一個專門用於記錄不同進程日誌的系統守護進程。