永发信息网

C++中的匿名管道如何实现连续的通信?

答案:2  悬赏:60  手机版
解决时间 2021-01-29 21:59
SECURITY_ATTRIBUTES sa;
HANDLE hRead, hWrite;

sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.lpSecurityDescriptor = NULL; //使用系统默认的安全描述符
sa.bInheritHandle = TRUE; //创建的进程继承句柄

if (!CreatePipe(&hRead, &hWrite, &sa, 0)) //创建匿名管道
{
cout << "CreatePipe Failed!" << endl;
return;
}

STARTUPINFO si;
PROCESS_INFORMATION pi;

ZeroMemory(&si, sizeof(STARTUPINFO));
si.cb = sizeof(STARTUPINFO);
GetStartupInfo(&si);
si.hStdError = hWrite;
si.hStdOutput = hWrite; //新创建进程的标准输出连在写管道一端
si.wShowWindow = SW_HIDE; //隐藏窗口
si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;

char cmdline[200]="cmd /C dir";

if (!CreateProcess(NULL, cmdline, NULL, NULL, TRUE, NULL, NULL, NULL, &si, &pi)) //创建子进程
{
cout << "CreateProcess Failed!" << endl;
return;
}
CloseHandle(hWrite); //关闭管道句柄
char buffer[4096] = { 0 };
CString strOutput;
DWORD bytesRead;

while (true)
{
if (ReadFile(hRead, buffer, 4095, &bytesRead, NULL) == NULL) //读取管道
break;

strOutput += buffer;
Sleep(100);
}
cout << strOutput;

CloseHandle(hRead);
如上有一段代码,其作用是调用了cmd并输入了命令dir查看目录下的文件,关掉管道的写句柄再得到cmd的输出。假如我想在这之后再cd ..回到上一级目录然后再dir查看上一级的目录该怎么办?重新创建一个的话目录还是初始的目录,如何达到命令的连续输入效果?
最佳答案
MSDN有范例
全部回答

getlasterro,会有错误原因的。

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
周松发室地址在什么地方,我要处理点事
桂联摩托车驾驶员培训中心怎么去啊,我要去那
下图为人体某一反射弧的示意图,a、b为微型电
一根铁棍穿过一个磁场会发生怎么样的运动情况
奥克斯空调内外机都不运行是哪里坏了
为什么外盘比内盘大而股票还在下跌
苏州皮市街花鸟市场营业时间,另外如何选择云
20 E 肠道菌鉴定的几组编码编码是7345773、 3
辊雷的意思是什么啊?知道的请说下!
杰斯哪个皮肤手感好,特效好,准备练杰斯买个
明芬驾校总部地址在什么地方,我要处理点事
荟萃发艺怎么去啊,我要去那办事
小弟急求,3V的LED灯16个串联接48V电动车电瓶
明芬驾校培训基地地址好找么,我有些事要过去
清末,某传教士记述:“促使中国学子年复一年
推荐资讯
福州有什么好玩的旅游景点
哪里有zard 1680x1050 1920x1080高
中国邮政(龙感湖邮政支局)地址有知道的么?有
跟一个同事吵架了 每天都要对着 上班对着就算
和男朋友是异地恋4年了 最近回来了 但只见过
【夜泊牛渚怀古】夜泊牛渚怀古中的""空’字意
吃了槟榔舌头长了小肉芽
晩气的意思是什么啊?知道的请说下!
跟分手后的男朋友聚会时见面了,应该说些什么
从1952年秋开始,我国对高等院校进行大规模调
为什么少数民族的男生一生下来就打耳洞
去小的财务公司实习没工资有销售提成
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?