我希望我的程序在 stderr 连接到控制台时和重定向到文件/管道时具有不同的行为。在 Unix 系统中,我可以只测试 isatty(STDERR_FILENO)
,但我如何在 Windows 中执行此操作? MSVCRT 也有一个名为 _isatty
的函数,它不能正常运行(例如 Detect NUL file descriptor (isatty is bogus) )。我可以调用任何 Windows 或 NT API 来测试它吗?
最佳答案
- 调用
GetStdHandle
获取标准错误句柄。 - 将该句柄传递给
GetFileType
以找出它是什么类型的文件。 - 如果返回
FILE_TYPE_CHAR
,则 stderr 可能是一个控制台,但调用GetConsoleMode
进行检查。 - 如果
GetConsoleMode
失败,则 stderr 已被重定向到另一个字符设备,例如打印机。
关于c++ - 如何判断 stderr 是否已在 Windows 中重定向?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42139699/