我正在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调用失败(返回空值)。可能是因为com1已经用于stdout。
环境:控制台应用程序,Windows 7,MingW
我做错什么了吗?是否有其他(或更好的)方法来完成重定向?
谢谢你的帮助!
最佳答案
我现在不能测试它,因为我只有一个虚拟的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));