管道重定向子进程输入时的错误
首先我把代码贴出来吧.
- Delphi(Pascal) code
sa.nLength:= SizeOf(sa); sa.lpSecurityDescriptor:= nil; sa.bInheritHandle:= True; if not CreatePipe(hOutRead, hOutWrite, @sa, 0) then begin ShowMessage('CreatePipe Error!!!'); Exit; end; ZeroMemory(@Buf[0],1024); ZeroMemory(@si, SizeOf(si)); si.cb:= SizeOf(si); si.dwFlags:= STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES; si.wShowWindow:= SW_HIDE; si.hStdOutput:= hOutWrite; si.hStdError:= hOutWrite; if not CreateProcess(nil,'E:\MinGW\Bin\gcc.exe c:\2_3.c -o c:\2_3.exe -O2 -Wall -lm -DONLINE_JUDGE',nil,nil,True,CREATE_NEW_CONSOLE,nil,nil,si,pi) then begin ShowMessage('CreateProcess Error!!!'); Exit; end; case WaitForSingleObject(pi.hProcess, 2000) of WAIT_OBJECT_0: begin CloseHandle(hOutWrite) ; if ReadFile(hOutRead,Buf, 1024, dwCount, nil) then begin ShowMessage('GetReadBack: ' + StrPas(PChar(@buf[0]))); end else begin dwCount:= GetLastError; ShowMessage(IntToStr(dwCount)); end; end; WAIT_TIMEOUT: TerminateProcess(pi.hProcess, 100); end; CloseHandle(pi.hProcess); CloseHandle(pi.hThread);调试过程中,发现ReadFile返回false了,而GetLastError返回109也就是Error_Broken_Pipe
如果在ReadFile前不关闭写入端hOutWrite的话,ReadFile函数会阻塞.
求解,如何解决这个问题.
[解决办法]
不等待进程,直接ReadFile