面經筆記 管道

2021-08-04 10:40:37 字數 2621 閱讀 7724

匿名管道只能實現本機機器上兩個程序的通訊,通常用來在父子程序間通訊,不能實現跨網路的通訊。

下面只貼出核心**:

父程序:

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加上其他的一些資...