管道重定向子进程输入时的错误
首先我把代码贴出来吧.
调试过程中,发现ReadFile返回false了,而GetLastError返回109也就是Error_Broken_Pipe
如果在ReadFile前不关闭写入端hOutWrite的话,ReadFile函数会阻塞.
求解,如何解决这个问题.
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函数会阻塞.
求解,如何解决这个问题.
...全文
相关推荐
Linux实验八:LinuxC-编程-IO-重定向和管道.doc
Linux实验报告(详细)
vs2008,控制台程序输入输出重定向
vs2008,控制台程序输入输出重定向,可在对话框程序中方便的输入输出
C语言实现的shell终端,支持管道、重定向等.zip
C语言实现的shell终端,支持管道、重定向等
操作系统实验八 Shell编程实验(进程管理实验).docx
大学操作系统实验报告
Python子进程subpocess原理及用法解析
主要介绍了Python子进程subpocess原理及用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下


Windows SDK/API
