Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何捕获c语言中的所有输出文本_C_Outputstream - Fatal编程技术网

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

如何捕获c语言中的所有输出文本,c,outputstream,C,Outputstream,这是我的问题。我正在为C语言中的一个项目开发一个单元测试类。单元测试类工作得很好,但它测试的方法之一调用API中的方法来与硬件进行通信。由于硬件是封闭式的软件,在我运行测试时,我真的没有办法允许它运行,而且由于测试的黑盒性质,我不需要这样做 这些调用只是发送到硬件的char*消息,在运行测试时,我只得到了大量“无法与API通信”的打印输出。我假设这是API部分的某种错误检查 我的问题是,为了一个漂亮的输出,在这种情况下,是否有捕获、抑制或检查所有发送到终端的文本的方法(这是输出流,对吗?我对C相

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

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


我的问题是,为了一个漂亮的输出,在这种情况下,是否有捕获、抑制或检查所有发送到终端的文本的方法(这是输出流,对吗?我对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-可能更好-但你可以偶尔领导一下。希望海报能够了解了解了解阅读这本书的好处。它广泛讨论了如何处理这些问题。