如何在 Windows 控制台中将数据输出到自定义流(3> 4> 等)?
Posted
技术标签:
【中文标题】如何在 Windows 控制台中将数据输出到自定义流(3> 4> 等)?【英文标题】:how to output data to custom streams (3> 4> etc..) in windows console? 【发布时间】:2014-05-13 11:33:46 【问题描述】:在文档中,除了标准 stdin、stdout 和 stderr 之外,还有关于其他流的信息。 (http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/redirection.mspx?mfr=true)
UNDEFINED 3-9 - These handles are defined individually by the application and are specific to each tool.
所以我想要完成的是通过自己的输出流创建让我们在插槽 3 上说并将其用于调试。 (我看到系统没有提供stddbg流。)
所以我的问题是 - 是否可以检查非标准输出流是否正在等待数据,就像我对 stderr 所做的那样:
isatty(fileno(stderr)) == 0
然后我可以选择一种对日志文件更友好的错误信息格式。 上面的代码在这样使用命令时是正确的:
myApp.exe param1 param2 2> error.log
但是当我需要区分调试(或性能)和错误消息时,我很想使用另一个流,例如:
myApp.exe param1 param2 3> debug.log
但是如何检查该流是否已连接到应用程序,我应该使用什么名称作为fileno()
函数的参数?
【问题讨论】:
【参考方案1】:句柄 3-9 似乎只是用于玩命令行的附加临时句柄,例如用于缓冲一些输入/输出。寻找一些 dos shell 巫师的答案,例如this 或this,看看如何使用它。我认为您不能以编程方式定义它。
【讨论】:
【参考方案2】:遗憾的是,自定义流仅存在于 cmd.exe
的特定实例中,并且不会传递给子进程。 (即使子 cmd.exe
进程也不会从父进程继承自定义流。)
【讨论】:
所以 ms 文档公然撒谎,暗示这些流可以通过编程方式访问:specific to each tool
,哇。
从技术上讲,它们可以通过编程方式访问,但仅限于使用内置命令的 MS 开发人员。我怀疑编写该文档的人要么从未意识到该限制,要么不理解它。不幸的是,根据我的经验,世界上缺乏既能理解这种技术细节又能清楚地写出来的人——很多人可以做到其中之一,但很少有人能同时做到。 :-)以上是关于如何在 Windows 控制台中将数据输出到自定义流(3> 4> 等)?的主要内容,如果未能解决你的问题,请参考以下文章
如何在swift ios中将多个图像添加到自定义表格视图单元格?