This question already has answers here:
Determine whether process output is being redirected in C/C++

(3个答案)


5年前关闭。




大家都知道有两种方法可以重定向标准输出。

首先,我们可以使用freopen_s将stdout和stderr重定向到文件。

其次,当我们这样调用可执行文件时,我们可以重定向stdout和stderr:xxx.exe> log.txt 2>&1。

所以我的问题是我如何知道stdout和stderr的重定向位置。

在这种情况下,我在程序中遇到了这个问题:
如果用户通过第二种方式重定向了标准输出,则应将其重定向到“CON”,并将一些日志打印到控制台。
如果用户未重定向它,则不应将这些日志打印到控制台。

这是因为如果用户未重定向它,则这些日志已经被打印到控制台。

最佳答案

您无法检测到将其定向到哪里,但是可以。

在Posix系统上,使用 isatty() :

#include <stdio.h>
#include <io.h>
...
if (isatty(fileno(stdin)))
    printf( "stdin is a terminal\n" );
else
    printf( "stdin is a file or a pipe\n");

在Windows上,使用 _isatty()

关于c++ - 我怎么知道标准输出在C++中指向哪里?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32516725/

10-11 16:33