这是我的问题。我正在为C中的项目开发一个单元测试类。单元测试类工作得很好但是它测试的一种方法从API调用一个Method来与一块硬件进行通信。由于硬件已关闭软件,我在运行测试时无法允许它运行,因为测试的黑盒性质,我不应该这样做。
这些调用只是发送到硬件的char *消息,在运行我的测试时,我得到了很多“无法与API通信”的打印输出。我假设是对API的某种错误检查。
我的问题是,为了获得漂亮的输出,无论如何都要捕获,抑制或检查在这种情况下发送到终端的所有文本。(那是输出流吗?我对C来说相当新)
答案 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 + D
或Ctrl + C
退出脚本命令。并且您将在本地目录中拥有appOutputlog.log
文件,其中包含在shell的命令提示符下打印的所有日志。
另外两个解决方案是使用fopen
,然后使用fprintf
而不是普通的printf
。
3另一个解决方案是将您的流程连接到系统上运行的syslogd
。这是收集日志的最标准和生产方式之一。 syslogd
是一个系统守护进程,专门用于记录不同进程的日志。