2010-08-04 55 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是一个专门用于记录不同进程日志的系统守护进程。