0

目标应用程序可以在“管道”模式下使用,这意味着它接受来自标准输入的输入,并且可以输出到标准输出。

但是,总是存在用户犯错误的风险,将输出定向到标准输出,而实际上没有将标准输出定向到“某物”(文件或消费者程序)。因此,控制台屏幕会显示二进制数据(因为默认情况下,标准输出会输出到屏幕)。

底线:我想避免二进制输出自动显示到控制台中。它必须在可移植的 C中完成,并且不依赖于外部脚本。

一些潜在的方法:

1)是否有可能检测到标准输出将进入控制台,以便将其重定向到其他地方?(包括 /dev/nul)。请注意,代码必须是可移植的,并且适用于 Windows 和 Linux(以及 BSD、OpenSolaris 等)

2)替代方案:是否可以默认将标准输出重定向到“其他地方”(例如/dev/nul),而不会真正损害程序的正确使用,将标准输出重定向到有效的消费者进程?

4

1 回答 1

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 上运行。

于 2013-07-23T18:12:35.570 回答