將關於匿名管道通訊過程中遇到的問題以及心得總結一下:
使用場合:匿名管道通訊對執行緒間通訊和父子程序之間的通訊非常有用
一下**分三部分:
1.建立匿名管道;
2.建立子程序:
(1).使用getstdhandle函式獲取標準輸出裝置的控制代碼
(2).使用setstdhandle函式將標準輸出到寫匿名管道
(3).使用getstartupinfo函式獲取本程序的startupinfo的資訊,為什麼要用該函式獲得該資訊?該結構體的資訊不是被賦值了嗎?
(4).接著繼續對startupinfo結構體賦值,注意與建立其他程序不同,分別對si的五個相關成員進行賦值
(5).createprocess函式的第五個引數必須為true,剛開始給這個值賦false,結果不能實現
3.讀取資訊
(1).再次呼叫setstdhandle函式恢復本程序的標準輸出
(2).呼叫closehandle函式關閉寫控制代碼,如果不寫這一句,程式在執行時卡死;
(3).用readfile函式從讀控制代碼端將資訊讀到乙個buffer中
(4).關閉建立程序時的控制代碼
注意:1.呼叫getlasterror函式必須緊跟要被檢測函式之後;
2.陣列最好也要初始化,在本例中輸出字串後面跟著一堆亂碼
2.在edit控制項中顯示必須要updatedata(false);
handle hreadpipe;
handle hwritepipe;
security_attributes sa;
sa.nlength = sizeof(security_attributes);
sa.lpsecuritydescriptor = null;
sa.binherithandle = true;
if (!createpipe(&hreadpipe, &hwritepipe, &sa, 0))
messagebox(l"create pipe fail");
//建立程序
startupinfo si;
process_information pi;
zeromemory(&pi, sizeof(process_information));
si.cb = sizeof(startupinfo);
handle htemp = getstdhandle(std_output_handle);//
// 設定標準輸出到匿名管道
setstdhandle(std_output_handle, hwritepipe);//
getstartupinfo(&si); // 獲取本程序的startupinfo結構資訊
si.hstdinput = hreadpipe;
si.hstdoutput = hwritepipe;
si.hstderror = hwritepipe;
si.dwflags = startf_useshowwindow | startf_usestdhandles;
si.wshowwindow = sw_hide;
// wchar_t szpath[max_path] = _t("e:\\tool\\lenovo logo change tool\\h2offt-wx64.exe -edt4s:\"add:gif:1920x1080\" -edt4f:\"y-logo-gif64.gif\"");
wchar_t szpath[max_path] = _t("f:\\code\\test\\mydlgclass1\\debug\\untitled.exe sa");
if (!createprocess(null, szpath, null, null, true, create_no_window, null, null, &si, &pi))
messagebox(l"create process fail");
//讀取資訊
char szbuffer[max_path] = ;
dword dreadnum;
setstdhandle(std_output_handle, htemp); // 恢復本程序的標準輸出//
closehandle(hwritepipe); // 關閉寫控制代碼//必須加這一句 ,否則卡死
sleep(1000);
if (readfile(hreadpipe, szbuffer, max_path, &dreadnum, null) == null)
// szbuffer[max_path] =l'/0';
m_edittest = szbuffer;
closehandle(pi.hprocess);
closehandle(pi.hthread);
updatedata(false);
程序間通訊 匿名管道
最近實現乙個遠端超級終端的功能,通訊模式是這樣的 客戶端 通過網路傳送cmd命令到 伺服器端 通過程序間通訊 管道 將此cmd命令發給 cmd.exe程式,cmd.exe執行此cmd命令 接下來 cmd.exe 程式將執行結果返回 伺服器端 傳送此次結果到 客戶端,客戶端對結果進行顯示 其中伺服器端...
程序間通訊 匿名管道
1.程序通訊的目的 1 資料傳輸 乙個程序需要將它的資料傳輸給另乙個程序 2 資源共享 多個程序之間共享同樣的資源 3 通知事件 乙個程序需要向另乙個或一組程序傳送訊息,通知它們發生了什麼事情 2.管道 管道是一種程序之間通訊的一種方式,我們把從乙個程序連線到另乙個程序的資料流叫做管道 3.匿名管道...
程序間通訊 匿名管道
使用匿名管道做程序通訊,需要用父程序建立乙個子程序,該子程序的標準輸入輸出控制代碼由父程序指定。無論父程序還是子程序,都可以收發資料,這裡僅演示父程序發資料,子程序列印資料。父程序迴圈從控制台讀資料,並傳送給子程序,子程序用對話方塊列印資料,約定子程序收到 quit 後退出。define crt s...