阅读量:2
在C++中,可以使用CreatePipe
函数来创建一个管道,并将其连接到控制台输入和输出。下面是一个使用CreatePipe
函数操纵控制台的示例代码:
#include <Windows.h> #include <iostream> int main() { HANDLE hReadPipe, hWritePipe; SECURITY_ATTRIBUTES sa; PROCESS_INFORMATION pi; STARTUPINFO si; // 创建管道 sa.nLength = sizeof(SECURITY_ATTRIBUTES); sa.bInheritHandle = TRUE; sa.lpSecurityDescriptor = NULL; if (!CreatePipe(&hReadPipe, &hWritePipe, &sa, 0)) { std::cout << "Failed to create pipe" << std::endl; return 1; } // 将标准输出重定向到管道写入端 GetStartupInfo(&si); si.dwFlags = STARTF_USESTDHANDLES; si.hStdOutput = hWritePipe; // 创建子进程并执行命令 if (!CreateProcess(NULL, "ping 127.0.0.1", NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi)) { std::cout << "Failed to create process" << std::endl; return 1; } // 从管道读取子进程的输出 const int bufferSize = 4096; char buffer[bufferSize]; DWORD bytesRead; while (ReadFile(hReadPipe, buffer, bufferSize - 1, &bytesRead, NULL) && bytesRead != 0) { buffer[bytesRead] = '\0'; std::cout << buffer; } // 等待子进程退出 WaitForSingleObject(pi.hProcess, INFINITE); // 关闭句柄 CloseHandle(pi.hProcess); CloseHandle(pi.hThread); CloseHandle(hReadPipe); CloseHandle(hWritePipe); return 0; }
上面的代码创建了一个管道,并将子进程的标准输出重定向到管道的写入端。然后,它从管道的读取端读取子进程的输出,并将其打印到控制台。最后,它等待子进程退出并关闭相关的句柄。请替换ping 127.0.0.1
为你想要执行的命令。