如何捕获c中的所有输出文本

时间:2010-08-04 18:28:25

标签: c outputstream

这是我的问题。我正在为C中的项目开发一个单元测试类。单元测试类工作得很好但是它测试的一种方法从API调用一个Method来与一块硬件进行通信。由于硬件已关闭软件,我在运行测试时无法允许它运行,因为测试的黑盒性质,我不应该这样做。

这些调用只是发送到硬件的char *消息,在运行我的测试时,我得到了很多“无法与API通信”的打印输出。我假设是对API的某种错误检查。

我的问题是,为了获得漂亮的输出,无论如何都要捕获,抑制或检查在这种情况下发送到终端的所有文本。(那是输出流吗?我对C来说相当新)

3 个答案:

答案 0 :(得分:2)

如果您在生成这些消息的代码中进行链接,您还可以查看在stdout(或stderr)上调用freopen()。不幸的是,你将重定向所有程序的输出。

可以保留原始标准输出的句柄,创建管道,调用freopen()将stdout重定向到管道的一侧,并从另一侧读取线程,过滤输出和将“好”的消息传递给原始的标准输出。

答案 1 :(得分:0)

我假设您正在从shell运行程序,在这种情况下使用>将输出发送到文件中。见bash manual page

否则我需要更多信息。

答案 2 :(得分:0)

如果我正确理解您的问题,假设您从某种shell(bash或其他方式)启动您的应用程序,并且看到printf进入shell提示符。并且您想将它们保存到文件中。

嗯,这样做的简单方法是使用script命令。

您执行以下操作。

 ~> script appOutputlog.log

 ~> ./app.exe 

完成后,可能是因为应用已完成或您已完成录制日志。您可以使用Ctrl + DCtrl + C退出脚本命令。并且您将在本地目录中拥有appOutputlog.log文件,其中包含在shell的命令提示符下打印的所有日志。

另外两个解决方案是使用fopen,然后使用fprintf而不是普通的printf

3另一个解决方案是将您的流程连接到系统上运行的syslogd。这是收集日志的最标准和生产方式之一。 syslogd是一个系统守护进程,专门用于记录不同进程的日志。