匿名管道只能實現本機機器上兩個程序的通訊,通常用來在父子程序間通訊,不能實現跨網路的通訊。
下面只貼出核心**:
父程序:
void cparentview::onpipecreate()
startupinfo sui;//建立新程序所需資訊結構體
process_information pi;//程序資訊結構體
zeromemory(&sui, sizeof(startupinfo));//初始化
sui.cb = sizeof(startupinfo);
sui.dwflags = startf_usestdhandles;
sui.hstdinput = hread;//將子程序的標準輸入設為管道
sui.hstdoutput = hwrite;//將子程序的標準輸出設為管道
sui.hstderror = getstdhandle(std_error_handle);
auto tmp = createprocess(_t(".\\child.exe"), null, null, null, true, 0, null, null, &sui, &pi);
auto error = getlasterror();
//建立子程序:允許子程序繼承父程序控制代碼
if (!createprocess(_t(".\\child.exe"),null,null,null,true,0,null,null,&sui,&pi))
else
}void cparentview::onpiperead()
messagebox((lpctstr)(lptstr)buf);
}void cparentview::onwrite()
// todo: 在此新增命令處理程式**
}
子程序:
void cchildview::oninitialupdate()
void cchildview::onpiperead()
messagebox((lpctstr)(lptstr)buf);
}void cchildview::onpipewrite()
}
匿名管道沒有名稱,所以只能在父程序呼叫createprocess()函式建立子程序時,將管道的控制代碼傳遞給子程序。
父程序通過:
sui.hstdinput = hread;//將子程序的標準輸入設為管道
sui.hstdoutput = hwrite;//將子程序的標準輸出設為管道
將匿名管道的控制代碼作為引數(sui)傳遞給子程序
子程序通過:
hread = getstdhandle(std_input_handle);
hwrite = getstdhandle(std_output_handle);
獲取匿名管道的控制代碼
利用管道,通過標準的win32檔案系統函式:readfile()、 writefile()進行資料的收發。
在伺服器端呼叫createnamedpipe()建立命名管道後,呼叫connectnamedpipe()函式讓伺服器等待客戶端連線,
在客戶端,首先呼叫waitnamedpipe()函式判斷當前是否有可用的管道例項,如果有,則呼叫createfile()函式開啟命名管道例項,建立連線。
createfile()函式:建立或開啟檔案 、 pipes物件,並返回乙個可以用來訪問這些物件的控制代碼。服務的建立命名管道:
void cparentview::onpipecreate()
handle hevent;//匿名人工重置事件物件
hevent = createevent(null, true, false, null);
if (!hevent)
ovlap.hevent = hevent;
if (!connectnamedpipe(hpipe,&ovlap))
}if (wait_failed == waitforsingleobject(hevent,infinite))
closehandle(hevent);
}
客戶端連線命名管道:
void cchildview::onpipeconnect()
hpipe = createfile(_t("\\\\.\\pipe\\mypipe"), generic_read | generic_write, 0, null, open_existing, file_attribute_normal, null);
if (invalid_handle_value == hpipe)
// todo: 在此新增命令處理程式**
}
讀寫使用,兩者是一樣的:
void cparentview::onpiperead()
messagebox((lpctstr)(lptstr)buf);
}void cparentview::onwrite()
}
面經筆記 STL
空間配置器 為什麼不說allocator是記憶體配置器 空間不一定是記憶體,空間也可以是磁碟或其他儲存介質,你可以寫乙個allocator直接向硬碟取空間。sgi stl的配置器名為alloc,是預設的空間配置器。雖然也定義了乙個符合部分標準的allocator配置器,但只是把c 中new和dele...
面經 葫蘆面經
1 給定乙個n位數,例如12345,從裡面去掉k個數字,得到乙個n k位的數,例如去掉2,4,得到135,去掉1,5,得到234。設計演算法,求出所有得到的 n k位數裡面最小的那乙個 2 找明星 n個人中,只有乙個明星 明星不認識其他所有的人,而其他人 都認識明星,這些人中也可能相互認識。你每次只...
面經筆記 cuda gpu概念
與cuda相關的幾個概念 thread,block,grid,warp,sp,sm。sp 小核 流處理器 最基本的處理單元,streaming processor 最後具體的指令和任務都是在sp上處理的。gpu進行平行計算,也就是很多個sp同時做處理 sm 大核 流多處理器 多個sp加上其他的一些資...