3

这是我的问题。我正在为 C 中的一个项目开发一个单元测试类。单元测试类工作得很好,但是它正在测试的方法之一从 API 调用一个方法来与一块硬件进行通信。由于硬件是封闭的软件,在我运行测试时我真的没有办法让它运行,而且由于测试的黑盒性质,我不需要这样做。

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

我的问题是,为了一个漂亮的输出,在这种情况下是否有捕获、抑制或检查所有进入终端的文本。(那是输出流对吗?我对 C 很陌生)

4

3 回答 3

2

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

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

于 2012-06-15T08:14:31.347 回答
0

I am assuming that you are running the program from a shell, in that case use > to send the output into a file. See bash manual page

Otherwise I would need a bit more info.

于 2012-06-15T08:08:39.457 回答
0

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

好吧,最简单的方法是使用script命令。

您执行以下操作。

 ~> script appOutputlog.log

 ~> ./app.exe 

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

2其他解决方案是使用fopen后跟fprintf代替普通printfs。

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

于 2012-06-15T08:20:37.610 回答