VC 下對匿名管道的程式設計實現

2021-04-12 17:06:29 字數 1533 閱讀 8414

總的來說,匿名管道程式是比較簡單的。在下面將要給出的程式示例中,將由父程序(管道伺服器)建立乙個子程序(管道客戶機),子程序回見個其全部的標準輸出傳送到匿名管道中,父程序再從管道讀取資料,一直到子程序關閉管道的寫控制代碼。其中,匿名管道伺服器程式的實現清單如下:  

startupinfo si;

process_information pi;

char readbuf[100];

dword readnum;

handle hread; // 管道讀控制代碼

handle hwrite; // 管道寫控制代碼

bool bret = createpipe(&hread, &hwrite, null, 0); // 建立匿名管道

if (bret == true)

printf("成功建立匿名管道!/n");

else

printf("建立匿名管道失敗,錯誤**:%d/n", getlasterror());

// 得到本程序的當前標準輸出

handle htemp = getstdhandle(std_output_handle);

// 設定標準輸出到匿名管道

setstdhandle(std_output_handle, hwrite);

getstartupinfo(si); // 獲取本程序的startupinfo結構資訊

bret = createprocess(null, "client.exe", null, null, true, null, null, null, &si, pi); // 建立子程序

setstdhandle(std_output_handle, htemp); // 恢復本程序的標準輸出

if (bret == true) // 輸入資訊

printf("成功建立子程序!/n");

else

printf("建立子程序失敗,錯誤**:%d/n", getlasterror());

closehandle(hwrite); // 關閉寫控制代碼

// 讀管道直至管道關閉

while (readfile(hread, readbuf, 100, readnum, null))

if (getlasterror() == error_broken_pipe) // 輸出資訊

printf("管道被子程序關閉/n");

else

printf("讀資料錯誤,錯誤**:%d/n", getlasterror());

在本示例中,將當前程序的標準輸出設定為使用匿名管道,再建立子程序,子程序將繼承父程序的標準輸出,然後再將父程序的標準輸出恢復為其初始狀態。於是父程序便可從管道讀取資料,直到有錯誤發生或關閉管道寫入端的所有控制代碼。建立的子程序只是向標準輸出和標準錯誤傳送一些文字資訊,其中傳送給標準輸出的文字將重定向輸出到管道,傳送給標準錯誤的文字將不改變輸出。下面給出子程序的實現**:  

int main(int argc, char* argv)

return 0;

}

VC 下命名管道程式設計的原理及實現

每乙個命名管道都有乙個唯一的名字以區分於存在於系統的命名物件列表中的其他命名管道。管道伺服器在呼叫createnamedpipe 函式建立命名管道的乙個或多個例項時為其指定了名稱。對於管道客戶機,則是在呼叫createfile 或callnamedpipe 函式以連線乙個命名管道例項時對管道名進行指...

Linux 下匿名管道的檔案讀寫

操作平台 ubuntu 12.04 匿名管道用在父子程序之間,父程序向管道中寫資料,子程序從管道中讀出資料 如下 include include include include using namespace std intmain int result result pipe pipefd 0 建...

VC命名管道通訊的實現

無論是 sql server 的使用者,還是 pb的使用者,作為 c s結構開發環境,他們在網路通訊的 實現上,都有一種共同的方法 命名管道。由於當前作業系統的不惟一性,各個系統 都有其獨自的通訊協議,導致了不同系統間通訊的困難。儘管 tcp ip 協議目前已發展成 為 internet 的標準,但...