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查看上一级的目录该怎么办?重新创建一个的话目录还是初始的目录,如何达到命令的连续输入效果?
C++中的匿名管道如何实现连续的通信?
答案:2 悬赏:60 手机版
解决时间 2021-01-29 21:59
- 提问者网友:泪痣哥哥
- 2021-01-28 23:12
最佳答案
- 五星知识达人网友:廢物販賣機
- 2021-01-29 00:36
MSDN有范例
全部回答
- 1楼网友:罪歌
- 2021-01-29 00:59
getlasterro,会有错误原因的。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯