我希望我的程序在stderr连接到控制台和重定向到文件/管道之间有不同的行为。在Unix系统中,我只能测试isatty(STDERR_FILENO)
,但我如何在Windows中执行此操作? MSVCRT也有一个名为_isatty
的功能,它不能正常工作(例如,Detect NUL file descriptor (isatty is bogus))。是否有任何Windows或NT API我可以打电话来测试它?如何判断stderr是否已在Windows中重定向?
1
A
回答
3
- 致电
GetStdHandle
获取stderr句柄。 - 将该句柄传递给
GetFileType
以查明它是什么类型的文件。 - 如果返回
FILE_TYPE_CHAR
则stderr可能是控制台,但请致电GetConsoleMode
进行检查。 - 如果
GetConsoleMode
失败,则标准错误已被重定向到另一个字符设备,例如打印机。
+0
这是不够的,正如[建议的重复](http://stackoverflow.com/q/40709193/1889329)中所述。 – IInspectable
+0
如果句柄不是字符设备,'GetConsoleMode'会成功吗?如果不是,那么'GetFileType'是多余的。 –
0
对于我来说,最简单的方法是使用fseek(stderr, 0, SEEK_CUR)
如果stderr
被重定向到一个文件,如果<>0
stderr
不重定向返回0
。
相关问题
- 1. 如何判断stderr是否将输出指向文件?
- 2. 如何判断NSUserDefaults是否已保存?
- 3. 如何判断NSManagedObject是否已保存?
- 4. 如何判断任务是否已在django-celery中排队?
- 5. 在MFC中,如何判断CComboBox是否已启用?
- 6. 如何判断ajax计时器是否已在page_load中关闭
- 7. 如何判断sys.stdout是否已在Python中刷新
- 8. 如何判断SP1是否已安装在Team Foundation Server 2008上?
- 9. 如何判断SP1是否已安装在VS2008上?
- 10. 如何判断一个侦听器是否已经在运行?
- 11. 如何判断网页是否存在?
- 12. 如何判断路径是否指向Windows中的应用程序
- 13. 如何判断计算机是否是C#中特定Windows域的一部分
- 14. 如何判断您是否在Windows上编译?
- 15. 如何判断SP1是否安装在Windows Server 2008 R2 Standard上?
- 16. 如何判断某个方法是否在类中定义?
- 17. 如何判断某个特定列是否在表格中?
- 18. Javascript,html:如何判断选项框是否已设置?
- 19. 如何判断Android设备是否已关闭
- 20. 如何判断用户控件是否已完成加载vb6
- 21. 如何判断假期是否已过(每年)?
- 22. 如何判断文件是否已通过.NET更改?
- 23. 如何判断VSTO加载项是否已加载?
- 24. 如何判断Django QuerySet是否已被评估?
- 25. TransactionScope如何判断连接是否已被列入
- 26. 如何判断一个过程是否已经结束?
- 27. 如何判断.NET 3.5 SP1是否已安装?
- 28. 如何判断hadoop namenode是否已被格式化?
- 29. 如何判断IEnumerable是否已经过评估?
- 30. 如何判断表单runat = server是否已设置?
C和C++是不同的语言。你使用哪个? – Olaf
@Olaf:没关系。 Windows API可以从C和C++中使用。在C或C++中寻求解决方案(这没有什么不同)是标准做法。 – IInspectable
@IInspectable:如果这是WinAPI的问题,它使用C绑定,因此它是一个C问题。 – Olaf