C 程序中标准输入和标准输出的重定向

Redirection of stdin and stdout in a C Program

我在 Windows 控制台应用程序中使用典型的 putsprintfgetchar 函数。现在我想将标准输出和标准输入重定向到 COM 端口。

单独重定向 stdout 工作正常:

freopen ("COM1", "w", stdout);

之后所有输出都按预期进入 COM1。

但是对于输入我面临两个问题:

freopen ("COM1", "r", stdin);

1) 仅重定向标准输入,COM1 打开正常。但是 getchar(或类似函数)不会 return 来自 COM1 的字符。 getchar 永远不会 return。我尝试了几种模式(r、r+、rb,甚至 w)。

2) 如果标准输出已经重定向到 COM1,则对标准输入的 freopen 调用失败 (returns NULL)。可能是因为 COM1 已用于标准输出。

环境:控制台应用程序,Windows7,MinGW

我是不是做错了什么?是否有另一种(或更好的)方法来完成重定向?

感谢您的帮助!

我现在无法测试它,因为我只有一台 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));