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”,并将一些日志打印到控制台。
如果用户未重定向它,则不应将这些日志打印到控制台。
这是因为如果用户未重定向它,则这些日志已经被打印到控制台。
在Windows上,使用
(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