【发布时间】:2015-07-25 22:11:00
【问题描述】:
我在我的 Windows 控制台应用程序中使用典型的 puts、printf 和 getchar 函数。现在我想将标准输出和标准输入重定向到 COM 端口。
单独重定向标准输出工作正常:
freopen ("COM1", "w", stdout);
之后,所有输出都按预期发送到 COM1。
但是对于输入,我面临两个问题:
freopen ("COM1", "r", stdin);
1) 只有标准输入重定向,COM1 打开正常。但是getchar(或类似函数)不会从 COM1 返回字符。 getchar 永远不会回来。我尝试了几种模式(r、r+、rb,甚至 w)。
2) 如果标准输出已经重定向到 COM1,则对标准输入的 freopen 调用失败(返回 NULL)。可能是因为 COM1 已用于标准输出。
环境:控制台应用程序、Windows 7、MinGW
我做错了吗?是否有另一种(或更好的)方法来完成重定向?
感谢您的帮助!
【问题讨论】:
-
1) 我发现这是一个旧的 Windows 问题。端口设置不正确。必须设置超时。命令行上的“模式”把事情搞砸了。现在我直接在我的程序中调用 SetCommState() 和 SetCommTimeouts()。因此 freopen ("COM1", "r", stdin) 现在可以单独工作,但组合 - 重定向 stdout 和 stdin 仍然不起作用。
标签: c windows redirect serial-port stdin