この問題があります。 私は、cmdコマンドを実行する必要があるCコード化されたサーバーを作成しています。 main()は新しいスレッドを作成する必要があり、このスレッドはこのcmdコマンドを開始して結果を返す必要がある新しいプロセスを作成する必要があります。Cウィンドウ_popenコマンドの入力要求:フリーズを避ける
コマンドが出力(つまり、dir、netstat、lsなど)だけを返す場合、これは問題なく動作します。しかし、私が "日付"(新しい日付を待つ)として入力を待つコマンドを使用しようとすると、新しいプロセスがフリーズします。これは、新しいプロセスのハンドルで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
を実行するプロセスのコード