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