我在Windows控制台应用程序中使用典型的puts
,printf
和getchar
函数。现在我想将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
我做错了吗?是否有另一种(或更好的)方法来完成重定向?
感谢您的帮助!
答案 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));