我的C程序如何与CMD通信?

我的C程序如何与CMD通信?,c,windows,cmd,C,Windows,Cmd,我正在尝试用C创建一个控制台程序,它将接受用户命令,将它们传递给cmd,从cmd接收输出,然后通过它自己的控制台将其呈现给用户。类似于cmd代理的东西 据我所知,促进进程内通信的方法是通过管道,但我只在管道服务器和管道客户端都由我编写的应用程序中做到了这一点。对于如何使用cmd实现这一点,我感到非常困惑。虽然不是最好的解决方案,但如何使用?步骤1:使用fgets()读取stdin中的文本行,将它们传递到system()。步骤2:将它们传递给popen(),而是读取并打印响应行,直到EOF,调用p

我正在尝试用C创建一个控制台程序,它将接受用户命令,将它们传递给cmd,从cmd接收输出,然后通过它自己的控制台将其呈现给用户。类似于cmd代理的东西


据我所知,促进进程内通信的方法是通过管道,但我只在管道服务器和管道客户端都由我编写的应用程序中做到了这一点。对于如何使用cmd实现这一点,我感到非常困惑。

虽然不是最好的解决方案,但如何使用?步骤1:使用
fgets()
读取
stdin
中的文本行,将它们传递到
system()
。步骤2:将它们传递给
popen()
,而是读取并打印响应行,直到
EOF
,调用
pclose()
。步骤3:创建两个管道(一个用于写入,一个用于读取),调用
fork()
,关闭父级中写入和读取管道的读取和读取端,关闭子级中写入和读取管道的写入和读取端,使用
dup2()
将写入和读取管道“重命名”为
0
1
,在子级中调用
exec(“sh”)
,向父级中的子级写入命令并从中读取响应。(请注意,第3步相当棘手。:-)@SteveSummit,您似乎跳过了第3a步:切换到Unix系统或至少是Windows 10中的Linux子系统。Windows API中没有
fork
。内核为其他子系统(如WSL)支持它。当然,可以使用管道标准I/O运行cmd.exe。它甚至可以是一个分离的进程(即不连接到conhost.exe的实例),如果您在自定义GUI中显示shell而不是使用内置控制台(conhost.exe),这将非常有用。开始解决这个问题,当你碰到墙的时候问一个问题。