我正在使用someones库,当与设备的连接失败时,printf会输出错误消息。 连接成功时,库代码不打印任何内容。
我定期检查(循环和睡眠)以查看设备是否已连接,但我只想在连接时打印出来。
目前,我得到了类似的内容:
Waiting for connection... (<-- My print)
Error
Error
Error
Error
Error
Connection successful (<-- My print)
我想要的是:
Waiting for connection... (<-- My print)
Connection successful (<-- My print)
我如何以编程方式忽略printf?
N.b。我发现了一个类似的问题Programmatically Ignore Cout,但该解决方案不适用于printf。
我正在使用Windows。
有人可以帮忙吗? (c / c ++新手)
答案 0 :(得分:2)
您是否尝试过(在建立连接之前):
FILE * myout = stdout;
stdout = fopen ("standard-output-file", "w");
要输出要输出的内容,您可以使用:
fprintf(myout, "format", ...);
编辑:请记住以后关闭文件描述符:
fclose(myout);
答案 1 :(得分:0)
我能够通过以下方式在Linux下工作
#include <cstdio>
using namespace std;
int main() {
printf("Start\n");
freopen("/dev/null", "w", stdout);
printf("middle\n");
freopen("/dev/stdin", "w", stdout); // really stdin here!
printf("End\n");
return 0;
}
在Windows下我认为文件还有其他名称(nul
和con
可能)。
然而,这似乎完全不可移植,更糟糕的是,这会阻止用户将程序输出重定向到文件,因为我明确地重新打开/dev/stdin
。有人建议您可以使用/dev/fd/1
代替/dev/stdin
来缓解后一个问题,但我还没有对其进行测试。
似乎没有可靠的方法,例如, http://c-faq.com/stdio/undofreopen.html
答案 2 :(得分:0)
我不知道绝对解决方案,但您需要使用:
freopen("conout$", "w", stderr);
或类似的东西,但使用“conout $”伪文件,我认为这与Linux上的/dev/stdout
相同。
您可能必须使用GetStdHandle
,AttachConsole
等
答案 3 :(得分:0)
如果你使用的是c ++ 11及以上版本,你可以使用一个简单的可变参数模板而不需要太多编码,所以这会对所有情况重载printf
并且永远不会调用原始的
template <typename ...Args>
void printf(Args... ...)
{
}