目标应用程序可以在“管道”模式下使用,这意味着它接受来自stdin的输入,并可以输出到stdout。
但是,总是存在用户犯错误的风险,将输出定向到stdout,而实际上并没有将stdout指向“某事”(文件或消费者程序)。 因此,控制台屏幕会显示二进制数据(因为默认情况下,stdout输出到屏幕)。
底线:我想避免二进制输出自动显示在控制台中。必须在可移植C 中完成,而不依赖于外部脚本。
一些可行的方法:
1)是否有可能检测到stdout将进入控制台,以便将其重定向到其他地方? (包括/ dev / nul)。请注意,代码必须可移植,适用于Windows和Linux(以及BSD,OpenSolaris等)
2)替代方案:默认情况下是否可以将stdout重定向到“其他地方”(例如/ dev / nul),而不会实际损害程序的正确用法,将stdout重定向到有效的消费者流程?
答案 0 :(得分:4)
在POSIX(例如Linux和OSX)系统上,您可以使用isatty
功能检查stdout
是否转到控制台或其他内容:
if (isatty(STDOUT_FILENO))
printf("Going to a console\n");
else
printf("Standard output is redirected or piped\n");
不幸的是,没有便携式方法可以在POSIX系统和Windows上运行。