C windows _popen on命令请求输入:避免冻结

时间:2012-04-26 17:53:52

标签: c windows popen freeze

我有这个问题; 我正在编写一个必须执行cmd命令的C编码服务器。 main()必须创建一个新线程,并且该线程必须创建一个必须启动此cmd命令并发回结果的新进程。

如果命令仅发回输出(即dir,netstat,ls等),则此方法可以正常工作。但是当我尝试使用具有ro等待输入的命令作为" date" (等待新日期)新进程冻结。这是不可能解决的,因为我可以在新进程上使用WaitForSingleObject'处理并使用超时,如果进程暂时没有完成,我可以使用TerminateProcess()终止它。

但是使用进程cmd.exe将继续运行,因为它是由我的服务器进程启动的,并且从未关闭。

我不关心需要输入的命令,我只是想忽略它们,这样如果_popen等待某事我只需关闭cmd并返回。

有没有办法避免这种情况_popen冻结需要输入的命令?

这里是运行_popen

的进程的代码
char readBuff[8096];
DWORD readed;
ReadFile(pipe,readBuff,8096,&readed,NULL);
FILE * out=_popen(commandToExec,"r"); //assume commandToExec contains "date" 
char buffer[128];
char output[8096];
output[0]='\0';
while(fgets(buffer, 128, out)){
    snprintf(output,8096,"%s%s\n",outputComando,buffer);
}
DWORD writed;
WriteFile(pipe,outputComando,8096,&scritti,NULL); //it writes the output to a pipe

这在仅输出命令上工作正常,但它永远不会到达"而#34;在需要输入的命令(我调试它)

1 个答案:

答案 0 :(得分:1)

根据popen上的msdn页面,你需要额外的工作来重定向stdin和stout

http://msdn.microsoft.com/en-us/library/ms682499.aspx