需要帮助严重重定向Windows上的计时器程序的输入和输出

时间:2017-01-29 00:31:23

标签: c windows winapi cmd

我希望程序能够重定向两者的输入和输出 父母和子女的过程。例如,

GKMatch

家长打电话给孩子。子输出到child_output,父输出到父输出。

以下示例代码应该可以使用,但不是。为方便起见,我在字符串" ToBeRun"中对孩子的重定向操作符进行硬编码,而不是将其作为参数传递,就像在主程序中一样。

如果在命令行中没有将参数传递给父级,则子输出会正确地重定向到child_output.txt。但是,如果您在命令行上重定向父查询,请调用parent.exe> parent_output.txt,父输出未重定向。 parent_output.txt已创建,但在程序完成时为空。

parent "child.exe > child_output.txt" > parent_output.txt

1 个答案:

答案 0 :(得分:1)

我回答了我自己的问题:简单地说,WriteConsole()在写入重定向文件时失败。

因此,在写入重定向文件时,需要使用名称恰当的WriteFile()。

WriteFile()适用于重定向输出和常规控制台输出,因为Harry Johnston已经有用地指出,所以你可以在两种情况下使用它。这就是我所做的。

或者,尤其是如果您正在使用Unicode,您可以通过调用GetConsoleMode获取MSDN's advice并检查HANDLE是文件句柄还是控制台句柄。如果GetConsoleMode返回0,则它不是控制台。

你为什么要这样做?与WriteFile不同,WriteConsole是一个可以成为unicode或ASCII函数的宏,具体取决于是否定义了UNICODE。

From MSDN

  

ReadFile和WriteFile函数,或ReadConsole和WriteConsole   函数,使应用程序能够读取控制台输入和写入控制台   输出为字符流。 ReadConsole和WriteConsole表现得很好   与ReadFile和WriteFile完全相同,只是它们可以用作   宽字符函数(其中文本参数必须使用Unicode)或as   ANSI函数(其中文本参数必须使用>中的字符;   Windows字符集)。需要维护单组的应用程序   应该使用支持Unicode或ANSI字符集的源   ReadConsole和WriteConsole。