我在Windows控制台应用程序中使用了典型的puts
, printf
和getchar
函数。 现在我想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));