如何在C语言中捕获所有输出文本

3
这是我的问题。我正在为一项C语言项目编写单元测试类,该单元测试类很好用,但它正在测试的一个方法调用了API中的一个方法以与硬件通信。由于硬件的封闭式软件,我真的没有办法在运行测试时让其运行,并且由于测试的黑盒性质,我也不需要这样做。
这些调用只是发送到硬件的char*消息,当我运行我的测试时,我只得到了大量的"无法与API通信"打印输出,我认为这是API进行的某种错误检查。
我的问题是,出于美观输出的考虑,在这种情况下是否有办法捕获、抑制或检查所有进入终端的文本。(那是输出流吧?我对C语言还比较新)

1
请查阅嵌入式C语言测试驱动开发一书,详细讨论如何处理此类问题。 - Jonathan Leffler
3个回答

2
你还可以考虑在链接生成这些消息的代码时,调用freopen()来处理stdout(或stderr)。不幸的是,这将重定向程序的所有输出。
如果可能的话,你可以保留对原始stdout的处理方式,创建一个管道,调用freopen()将stdout重定向到管道的一侧,并从另一侧读取线程,过滤输出并将“好”的消息传递给原始stdout。

0

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

否则,我需要更多的信息。


请注意,>(或1>)仅重定向标准输出。如果您还想重定向标准错误输出,您还需要使用2> - moooeeeep
@moooeeeep - 我同意 - 但是你可以用bash做其他很棒的事情。这就是我给出链接的原因。 - Ed Heal
你可以更好地链接到这篇文章。手册中对此没有详细说明。 - moooeeeep
@moooeeeep - 可能更好 - 但有时你可以带头。希望发帖者能够了解掌握Bash的好处。 - Ed Heal

0

如果我理解你的问题正确,假设你是从某种类型的shell(如bash)启动应用程序,并且在shell提示符中看到printf。而你想将它们保存到文件中。

嗯,最简单的方法就是使用script命令。

你可以按照以下步骤进行操作。

 ~> script appOutputlog.log

 ~> ./app.exe 

当你完成了,无论是应用程序已经完成还是你已经完成记录日志。你可以使用Ctrl + DCtrl + C退出脚本命令。然后你将在本地目录中拥有appOutputlog.log文件,其中包含在shell命令提示符上打印的所有日志。

另外两种解决方案是使用fopen接着使用fprintf而不是普通的printf

第三种解决方案是将你的进程连接到运行在你的系统上的syslogd。这是收集日志的最标准和生产方式之一。syslogd是一个系统守护进程,专门记录不同进程的日志。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接