读书人

散分,ReadFile疑难有关问题,高手乱入

发布时间: 2012-02-01 16:58:19 作者: rapoo

散分,ReadFile疑难问题,高手乱入
在进程版块问了半天没人会

用ReadFile从管道里读ipconfig的输出结果,一执行到ReadFile那部就卡死了,沙漏了.

但调试到这部证明能读出正确的东西.


void CTestPipeDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
BOOL flag1;
SECURITY_ATTRIBUTES sa;
sa.bInheritHandle=TRUE;
sa.lpSecurityDescriptor=NULL;
sa.nLength=sizeof(SECURITY_ATTRIBUTES);
if(!CreatePipe(&hRead,&hWrite,&sa,0))
{
MessageBox( "管道创建失败 ");
return;
}
/////////////////
STARTUPINFO sui;
PROCESS_INFORMATION pi;
ZeroMemory(&sui,sizeof(STARTUPINFO));
sui.cb=sizeof(STARTUPINFO);
sui.dwFlags=STARTF_USESTDHANDLES;
sui.hStdInput=hRead;
sui.hStdOutput=hWrite;
sui.hStdError=GetStdHandle(STD_ERROR_HANDLE);
/////////////
char szFetCmd[] = "ipconfig /all ";
char szBuffer[1000];
CString strBuffer;
unsigned long count;
flag1=CreateProcess(NULL,szFetCmd,NULL,NULL,TRUE,0,NULL,NULL,&sui,&pi);
if(flag1)
{
flag1=ReadFile(hRead,szBuffer,1000,&count,0);
if(!flag1)
{
CloseHandle(hWrite);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
CloseHandle(hRead);
return;
}
else
{
strBuffer=szBuffer;
::AfxMessageBox(strBuffer);
CloseHandle(hWrite);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
CloseHandle(hRead);
return;
}
}
else
{
CloseHandle(hWrite);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
CloseHandle(hRead);
}
}


[解决办法]
flag1=CreateProcess(NULL,szFetCmd,NULL,NULL,TRUE,0,NULL,NULL,&sui,&pi);
WaitForSingleObject( pi.hProcess, INFINITE );//加上这句,等待子程序结束之后再读
if(flag1)
{
flag1=ReadFile(hRead,szBuffer,1000,&count,0);

读书人网 >VC/MFC

热点推荐