在C程序中重定向stdin和stdout

时间:2015-07-25 22:11:01

标签: c windows redirect serial-port stdin

我在Windows控制台应用程序中使用典型的putsprintfgetchar函数。现在我想将stdout和stdin重定向到COM端口。

单独重定向stdout工作正常:

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

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

然而,在输入中我遇到两个问题:

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

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

2)如果stdout已经重定向到COM1,则对stdin的freopen调用失败(返回NULL)。可能因为COM1已经用于stdout。

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

我做错了吗?是否有另一种(或更好的)方法来完成重定向?

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我现在无法测试它,因为我只有RDP可以访问的虚拟Windows机器,没有串行连接,但仍然不应该像这样工作吗?

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));