我正在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调用失败(返回空值)。可能是因为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));

10-08 08:31