C 匿名管道詳解及簡單案例(基於VS2013)

2021-09-24 20:26:39 字數 1942 閱讀 5065

cout << "成功建立匿名管道!\n";

//如果建立匿名管道成功,就啟動子程序,並將匿名管道的讀寫控制代碼傳遞給子程序

startupinfo sui;//建立子程序的函式需要的乙個結構體型別的值

process_information pi;

zeromemory(&sui, sizeof(startupinfo));//將其餘的成員全部置零,避免造成不好的影響

sui.cb = sizeof(startupinfo);//cb用來存放結構體變數startupinfo的長度

sui.dwflags = startf_usestdhandles;//標誌成員,表示當前startupinfo結構體的標準輸入,標準輸出和標準錯誤控制代碼有用

sui.hstdinput = hread;

sui.hstdoutput = hwrite;//將子程序的標準輸入輸出控制代碼分別設定為管道的讀、寫控制代碼

sui.hstderror = getstdhandle(std_error_handle);

sui.wshowwindow = sw_show; //隱藏命令列視窗

sui.dwflags = startf_useshowwindow | startf_usestdhandles;

writemsg();

if (!createprocess(null, "child.exe", null, null,

true, 0, null, null, &sui, &pi))//建立子程序(十個引數)

else

sleep(200);

readmsg();

return 0;

}在說明建立函式之前我們需要先了解程式**中涉及的幾個結構體具體是幹什麼的(詳細請查詢庫)

startupinfo:用於指定新程序的主視窗特性的乙個結構。

security_attributes:乙個與安全相關的結構體。

process_information:在建立程序時相關的資料結構之一,該結構返回有關新程序及其主線程的資訊。

其餘的**的具體含義已經給予了非常詳細的注釋,這裡只單說一下create函式的各個引數的具體含義

createprocess("child.exe", null, null, null,true, 0, null, null, &sui, &pi)

這裡一共有十個引數

1、子程序應用程式的程序名

2、指定命令列引數,預設為null

3|4、程序和執行緒安全屬性,預設為null,即使用系統預設安全屬性

5、值為true時,讓父程序的每個可繼承的開啟控制代碼都能被子程序繼承

6、建立標誌,如不需要,置值為0

7、讓新程序使用呼叫程序的環境、預設為null

8、讓父程序和子程序擁有同樣的驅動器和路徑,預設為null

9、startupinfo結構體例項化物件的位址(sui位址)

10、process_information的位址(pi位址)

讀資料**:

void readmsg()

else

else

cout << "成功寫入資料!\n";

}相對于父程序,子程序相應就要簡單很多了:

子程序讀資訊:

void readmsg()

sprintf(buf1, "子程序返回的資料為 %s!\n", buf);

return;

}子程序寫資訊:

void writemsg()

}子程序的主函式:

int main(int argc, char* ar**)

--------------------- 

原文: 

linux 匿名管道例項詳解

linux中程序的一種通訊方式 匿名管道 pipe函式建立管道 呼叫程式設計客棧pipe函式時在核心中開闢一塊緩衝區 稱為管道 用於通訊,它有乙個讀端乙個寫端,然後通過 pipe引數傳出給使用者程式兩個檔案描述符,pipe 0 指向管道的讀端,pipe 1 指向管道的寫端。所以管道在使用者程式看起來...

C 程序通訊之匿名管道

匿名管道只能用來實現同一臺機器上父子程序間通訊,而不能實現跨網路的通訊。利用匿名管道實現父子程序通訊時,需要注意 因為匿名管道沒有名稱,所以只能在父程序中呼叫createprocess函式建立子執行緒時,將管道的讀寫控制代碼傳遞給子執行緒。1.父程序 private handle m hread 匿...

匿名管道實現基於Socket的簡單cmd後門

back.h ifndef backdoor h define backdoor h extern handle hreadone pipe one read extern handle hwriteone pipe one write extern handle hwritetwo pipe tw...