如何捕获c语言中的所有输出文本
这是我的问题。我正在为C语言中的一个项目开发一个单元测试类。单元测试类工作得很好,但它测试的方法之一调用API中的方法来与硬件进行通信。由于硬件是封闭式的软件,在我运行测试时,我真的没有办法允许它运行,而且由于测试的黑盒性质,我不需要这样做 这些调用只是发送到硬件的char*消息,在运行测试时,我只得到了大量“无法与API通信”的打印输出。我假设这是API部分的某种错误检查如何捕获c语言中的所有输出文本,c,outputstream,C,Outputstream,这是我的问题。我正在为C语言中的一个项目开发一个单元测试类。单元测试类工作得很好,但它测试的方法之一调用API中的方法来与硬件进行通信。由于硬件是封闭式的软件,在我运行测试时,我真的没有办法允许它运行,而且由于测试的黑盒性质,我不需要这样做 这些调用只是发送到硬件的char*消息,在运行测试时,我只得到了大量“无法与API通信”的打印输出。我假设这是API部分的某种错误检查 我的问题是,为了一个漂亮的输出,在这种情况下,是否有捕获、抑制或检查所有发送到终端的文本的方法(这是输出流,对吗?我对C相
我的问题是,为了一个漂亮的输出,在这种情况下,是否有捕获、抑制或检查所有发送到终端的文本的方法(这是输出流,对吗?我对C相当陌生)我假设您是从shell运行程序,在这种情况下,使用
将输出发送到文件中。看
否则我需要更多的信息。如果您在生成这些消息的代码中进行链接,还可以在stdout(或stderr)上调用
freopen()
。不幸的是,您将重定向程序的所有输出
可以保留原始stdout的句柄,创建管道,调用
freopen()
将stdout重定向到管道的一侧,并从另一侧读取线程,过滤输出并将“良好”消息传递到原始stdout。如果我正确理解您的问题,假设您是从某种shell(bash
或其他)启动应用程序,并看到printf
进入shell提示符。您希望将它们保存到一个文件中
嗯,简单的方法是使用脚本命令
您可以执行以下操作
~> script appOutputlog.log
~> ./app.exe
完成后,可能是因为应用程序已完成,也可能是因为您已完成日志记录。您可以使用Ctrl+D
或Ctrl+C
退出脚本命令。您将在本地目录中拥有appOutputlog.log
文件,其中包含shell命令提示符上打印的所有日志
2另一种解决方案是使用fopen
后跟fprintf
而不是普通的printf
s
3另一个解决方案是将进程连接到系统上运行的syslogd
。是收集日志的最标准和最实用的方法之一syslogd
是一个系统守护进程,专门用于记录不同进程的日志 请注意,
(或1>
)仅重定向标准输出。如果你还想重定向stderr,你还需要2>
@moooeeep-同意-但是你可以用bash做其他奇妙的事情。这就是我给你链接的原因。你可以更好地链接到。手册页对此并不是很详细。@moooeeep-可能更好-但你可以偶尔领导一下。希望海报能够了解了解了解阅读这本书的好处。它广泛讨论了如何处理这些问题。