调用 ReadFile 挂起是什么原因?

shadowstar 2003-04-24 02:31:33
我创建了一个管道, 在我的程序里调用 DOS 命令并显示结果.

第一次调用 ReadFile 返回

Microsoft Windows 2000 [Version 5.00.2195]
(C) 版权所有 1985-2000 Microsoft Corp.

C:\>

第二次就不行了, 跟踪到 ReadFile 那一行就一直挂起...
...全文
54 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
shadowstar 2003-04-24
  • 打赏
  • 举报
回复
我知道怎么回事了, 少写了一个"\n", 嘿嘿~~~

谢了: pp616(傻小子)
pp616 2003-04-24
  • 打赏
  • 举报
回复
PROCESS_INFORMATION proc;
STARTUPINFO start;
SECURITY_ATTRIBUTES sa;
HANDLE hReadPipe,hWritePipe;
long ret;
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.bInheritHandle=true;
sa.lpSecurityDescriptor=NULL;
ret=CreatePipe(&hReadPipe,&hWritePipe,&sa,0);
if(ret==0)
{
//创建管道失败
}
memset(&start,0x00,sizeof(STARTUPINFO));
start.cb=sizeof(STARTUPINFO);
start.dwFlags=STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
start.hStdOutput=hWritePipe;
start.hStdError=hWritePipe;
bool retc=CreateProcess(NULL,cmd.c_str(),NULL,NULL,true, 0, 0, NULL, &start, &proc);
CloseHandle(hWritePipe);
//读取结果
int retlen;
DWORD readlen;
char *retbuf;
GetFileSize(hReadPipe,&retlen);
retbuf=(char *)malloc(retlen);
memset(retbuf,0x00,retlen);
ReadFile(hReadPipe, retbuf, retlen, &readlen,NULL);
//结果在retbuf中。
//处理结果代码
CloseHandle(proc.hProcess);
CloseHandle(proc.hThread);
CloseHandle(hReadPipe);

1,221

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧