84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
在網路上找了很多介紹管道的文章,可是貼出來的程式碼要嘛是片段,要嘛就連拼字都是錯誤百出,希望哪位大神能幫忙寫一個完整的簡單的實例,我好參考學習。 我想實現的效果:主程式創建一個子進程,執行另外一個exe程序,父進程透過匿名管道傳輸一個位元組數組給子進程,子進程收到資料去處理。兩個程式都是C++程式。運行在windows上。
人生最曼妙的风景,竟是内心的淡定与从容!
#include <Windows.h> #include <iostream> int main() { auto numArgs = 0; CommandLineToArgvW(GetCommandLineW(), &numArgs); if (numArgs > 1) { std::cout << "我是子进程" << std::endl; CHAR szBuffer[16]{ 0 }; ReadFile(GetStdHandle(STD_INPUT_HANDLE), szBuffer, sizeof(szBuffer), nullptr, nullptr); std::cout << szBuffer << std::endl; } else { std::cout << "我是父进程" << std::endl; SECURITY_ATTRIBUTES sa{ 0 }; sa.nLength = sizeof(sa); sa.bInheritHandle = TRUE; HANDLE hRead; HANDLE hWrite; CreatePipe(&hRead, &hWrite, &sa, 0); STARTUPINFOW si{ 0 }; si.cb = sizeof(si); si.hStdInput = hRead; si.dwFlags = STARTF_USESTDHANDLES; PROCESS_INFORMATION pi{ 0 }; WCHAR szCommand[512]{ 0 }; GetModuleFileNameW(nullptr, szCommand, _countof(szCommand)); wcscat(szCommand, L" test"); CreateProcessW(nullptr, szCommand, nullptr, nullptr, TRUE, CREATE_NEW_CONSOLE, nullptr, nullptr, &si, &pi); WriteFile(hWrite, "hello", 5, nullptr, nullptr); } system("pause"); return 0; }
人生最曼妙的风景,竟是内心的淡定与从容!