C 程序中标准输入和标准输出的重定向
Redirection of stdin and stdout in a C Program
我在 Windows 控制台应用程序中使用典型的 puts
、printf
和 getchar
函数。现在我想将标准输出和标准输入重定向到 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));
我在 Windows 控制台应用程序中使用典型的 puts
、printf
和 getchar
函数。现在我想将标准输出和标准输入重定向到 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));