stdin和stdout在C程序中的redirect

我在Windows控制台应用程序中使用了典型的putsprintfgetchar函数。 现在我想redirect标准输出和标准input到COM端口。

redirectstdout单独工作正常:

 freopen ("COM1", "w", stdout); 

之后所有的输出都按照预期进入COM1。

然而,在投入方面,我面临两个问题:

 freopen ("COM1", "r", stdin); 

1)只有stdinredirect,COM1打开确定。 但是, getchar (或类似的函数)不会从COM1返回字符。 getchar永远不会返回。 我尝试了几种模式(r,r +,rb,甚至w)。

2)如果stdout已经被redirect到COM1,那么对stdin的freopen调用失败(返回NULL)。 可能是因为COM1已经在使用stdout。

环境:控制台应用程序,Windows 7,MinGW

难道我做错了什么? 有没有其他(或更好的)方法来完成redirect?

谢谢你的帮助!

我现在不能测试它,因为我只有一个虚拟的Windows机器可以通过RDP访问,没有串行连接,但是仍然不应该这样工作?

 int comfd = open("COM1", O_RDWR); dup2(comfd, 0); dup2(comfd, 1); 

或者,如果你不喜欢硬编码的fds

 int comfd = open("COM1", O_RDWR); dup2(comfd, fileno(stdin)); dup2(comfd, fileno(stdout));