程序間通訊 匿名管道通訊

2021-07-06 09:23:01 字數 2409 閱讀 4819

將關於匿名管道通訊過程中遇到的問題以及心得總結一下:

使用場合:匿名管道通訊對執行緒間通訊和父子程序之間的通訊非常有用

一下**分三部分:

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...