创建匿名管道获得CMD的返回信息时的疑问?菜鸟求大牛解答

ak200111 2013-08-20 05:24:58
编程写了个获取cmd返回信息的程序,由于返回信息很短所以想着只读取一次管道就把数据读完,后来发现这样做很容易错。
以ipc连接为例,使用错误的用户名密码连接时返回
////////////////////////
发生系统错误 1326。

登录失败: 未知的用户名或错误密码。
/////////////////////////
关键代码如下中间略有省略
while(true)
{
...
memset(buffer,0,256);//此处下了个断点:断点1
ReadFile(hRead,buffer,256,&bytesRead,NULL);
printf("%s",buffer);
...
}
每次F5调试在断点1停下,略等小会再F5就能得到正常的值,如下
+buffer 0x0037f378 "发生系统错误 1326。\r\n\r\n登录失败: 未知的用户名或错误密码。\r\n\r\n" char[256]
这是正常的情况(从vs2012调试中直接复制过来的)
但如果把断点去掉,直接运行每次从管道读取到的数据就变成如下了
+buffer 0x0014f190 "发生系统错误 1326。\r\n" char[256]
只能读取到一部分。
现在我将程序改成以下形式了
//////////////////////////////////////////////
char buffer[256] = {0};
string strOutput="";
DWORD bytesRead;
while (true)
{
memset(buffer,0,256);
if (ReadFile(hRead,buffer,256,&bytesRead,NULL) == NULL) //读取管道
break;
strOutput += buffer;
}
////////////////////////////////////////////
现在就想问问,为什么会出现这种只能读取部分数据的现象?是管道设置问题还是程序逻辑哪有问题?求大牛解答
...全文
305 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
ak200111 2013-09-24
  • 打赏
  • 举报
回复
不知有没有高手指点迷津?

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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