Windows程序通訊之一看就懂的匿名管道通訊
目錄
- 程序通訊之一看就懂的匿名管道通訊
- 一丶匿名管道
- 1.1何為匿名管道
- 1.2建立匿名管道需要注意的事項
- 1.3 建立匿名管道需要的步驟
- 1.4程式碼例子
- 1.5程式碼執行截圖
- 一丶匿名管道
程序通訊之一看就懂的匿名管道通訊
一丶匿名管道
1.1何為匿名管道
匿名管道是用來父程序跟子程序通訊的.還有一種是命名管道.不需要父子程序就可以進行通訊的.今天先說匿名管道的.
匿名管道. 就是父程序建立子程序. 讀取子程序資料.或者給子程序傳送資料.當然子程序也可以給父程序傳送資料.以及讀取父程序傳送過來的資料.
1.2建立匿名管道需要注意的事項
建立匿名管道,首先你要明白什麼是管道. 管道你可以想象成一個管子.
我們通過這個管子傳送資料.
如下圖所示:
通過上圖,我們就知道其實建立了兩個管道. 分別是父程序讀取的管道.以及
子程序讀取的管道.相應的.子程序也可以對父程序讀取的管道進行傳輸資料.父程序就可以讀取了.
這段話可能難以理解.你可以這樣想.
我父程序讀取子程序使用第一個管道. 那麼反正子程序寫的話也是使用第一個管道.因為子程序寫.我們父程序才能讀.
1.3 建立匿名管道需要的步驟
首先你需要了解建立匿名管道的API
WINBASEAPI BOOL WINAPI CreatePipe( _Out_ PHANDLE hReadPipe, _Out_ PHANDLE hWritePipe, _In_opt_ LPSECURITY_ATTRIBUTES lpPipeAttributes, _In_ DWORD nSize );
關於這個API很簡單.相比你過來看匿名管道.說明你已經知道這個API了.
只不過不知道管道概念.(我猜的);
這個API很簡單.就是建立管道. 兩個控制代碼.讀取控制代碼跟寫入控制代碼.
我們需要建立兩個管道.
還需要注意的是,父程序建立子程序,必須讓父程序控制代碼可繼承.這個就是第三個屬性.安全屬性描述符中給即可.
那麼說一下建立步驟吧.
1.建立一個安全屬性描述符,設定控制代碼可繼承
2.建立兩個管道. 父讀->子寫 子讀->父寫的
3.重定向輸出,將子程序的讀 以及子程序的寫重定向.
4.建立子程序
5.讀取\寫入資料給子程序.
1.4程式碼例子
#include <stdio.h> #include <stdlib.h> #include <Windows.h> int main() { HANDLE hParentRead, hParentWrite, hChildRead, hChildWrite; //建立4個控制代碼 STARTUPINFO si = { 0 }; //啟動資訊結構體 si.cb = sizeof(si); PROCESS_INFORMATION pi = { 0 }; //程序資訊結構體 DWORD dwWritedBytes = 0; DWORD dwReadedBytes = 0; DWORD dwBytesRead = 0; DWORD dwTotalBytesAvail = 0; DWORD dwBytesLeftThisMessage = 0; SECURITY_ATTRIBUTES sa = { 0 }; //安全屬性描述符 sa.nLength = sizeof(SECURITY_ATTRIBUTES); sa.bInheritHandle = TRUE; //設定控制代碼可繼承 //建立管道1. 父程序讀 -> 子程序寫入 BOOL bRet = CreatePipe(&hParentRead, &hChildWrite, &sa, 0); //建立管道2. 子程序讀->父程序寫. bRet = CreatePipe(&hChildRead, &hParentWrite, &sa, 0); //這裡將子程序寫重定向到 stdout中. 子程序讀取重定向到stdinput中 si.hStdInput = hChildRead; si.hStdOutput = hChildWrite; si.dwFlags = STARTF_USESTDHANDLES; //設定視窗隱藏啟動 bRet = CreateProcess(NULL, "cmd.exe", //建立cmd程序.預設尋找cmd程序. NULL, NULL, TRUE, CREATE_NO_WINDOW, NULL, NULL, &si, &pi); char szBuffer[15] = "calc \n"; WriteFile(hParentWrite, szBuffer, 15, NULL, 0);//使用writeFile操作管道,給cmd傳送資料命令. return 0; }
1.5程式碼執行截圖
相關推薦
Windows程序通訊之一看就懂的匿名管道通訊
目錄 程序通訊之一看就懂的匿名管道通訊 一丶匿名管道 1.1何為匿名管道 1.2建立匿名管道需要注意的事項 1.3 建立匿名管道需要的步驟 1.4程式碼例子 1
一看就懂的手機APP開發教程
軟件開發 移動開發 界面 服務端 平臺 android 教程 效率 疑問 現在的移動互聯網屬於全民的狂歡時代,是每個人、每個用戶、每個企業的歡暢淋漓的時代,所以APP正在勢如破竹地開拓廣闊的市場。手機APP開發指的是專註於手機應用軟件開發與服務,是當前最為迫切的需求。無獨有
一看就懂的ReactJs入門教程-精華版-轉載
角度 ice ets perf date 入門實例 view 此外 map 傳送門:http://www.cnblogs.com/yunfeifei/p/4486125.html 現在最熱門的前端框架有AngularJS、React、Bootstrap等。自從接觸了R
一看就懂的Centos6.10安裝教程
定義 分區 屬於 虛擬 51cto 默認 救援模式 所有 博客 第一步將虛擬機安裝完畢後,運行虛擬機進行到這個界面下(虛擬機安裝及其配置,詳見論壇內的博客分享在這就不在陳述),:出現的是5條英文由上到下以此分別為:1.安裝或升級2.基本的顯卡驅動來安裝系統(在有些操作系統無
深入解讀HashMap,一看就懂
als 進行 get next 分配 行處理 而是 pac 代碼包 HashMap 和 HashSet 是 Java Collection Framework 的兩個重要成員,其中 HashMap 是 Map 接口的常用實現類,HashSet 是 Set 接口的常用實現類。
一看就懂的Markdown語法
大氣 舉例 無法 .cn 拼音輸入法 數學公式 head 特點 thead 目錄 一、Markdown簡介 二、編輯工具推薦 三、語法 1.標題 2.列表 3.引用 4.加粗、斜體等 5.鏈接與圖片 6.更改圖片大小 7.代碼塊 8.表格 9.數學表達式 10.水平分割線
maven如何編譯(陳老師精講一看就懂)
陳老師說了,沒強調的意味著現在不要花精力去研究,會用即可。後面不斷用它自然不就會了嗎。 maven被陳老師講完之後簡直太特麼簡單了,以下是步驟: 1. eclipse- new project--maven 建立maven專案 2. 一直next即可,group id就
一看就懂!【英雄聯盟銳雯】與 Python 詳解設計模式之門面模式
【網路配圖】 設計模式(Design Pattern)是一套被反覆使用、多數人知曉的、經過分類的、程式碼設計經驗的總結。使用設計模式的目的:為了程式碼可重用性、讓程式碼更容易被他人理解、保證程式碼可靠性。設計模式使程式碼編寫真正工程化;設計模式是軟體工程的基石脈絡,如同大廈的結構一樣
一看就懂【來自英雄聯盟蓋倫的怒吼】與 Python 詳解設計模式(二)觀察者模式
觀察者模式概述 觀察者模式(有時又被稱為模型-檢視(View)模式、源-收聽者(Listener)模式或從屬者模式)是軟體設計模式的一種。在此種模式中,一個目標物件管理所有相依於它的觀察者物件,並且在它本身的狀態改變時主動發出通知。這通常透過呼叫各觀察者所提供的方法來實現。此種模式通常被用來實現事件處理系統
演算法的時間與空間複雜度(一看就懂)
演算法(Algorithm)是指用來操作資料、解決程式問題的一組方法。對於同一個問題,使用不同的演算法,也許最終得到的結果是一樣的,但在過程中消耗的資源和時間卻會有很大的區別。 那麼我們應該如何去衡量不同演算法之間的優劣呢? 主要還是從演算法所佔用的「時間」和「空間」兩個維度去考量。 時間維
算法的時間與空間復雜度(一看就懂)
情況 com mage 符號表 分配 結果 ++i inf 容易 算法(Algorithm)是指用來操作數據、解決程序問題的一組方法。對於同一個問題,使用不同的算法,也許最終得到的結果是一樣的,但在過程中消耗的資源和時間卻會有很大的區別。 那麽我們應該如何去衡量不同算法之
WaitForMultipleObjects用法詳解,一看就懂
原文:https://blog.csdn.net/sac761/article/details/52456385 WaitForMultipleObjects是Windows中的一個功能非常強大的函式,幾乎可以等待Windows中的所有的核心物件。 函式原型為: DWORD Wait
泛型一看就懂
public class GenericTest { public static void main(String[] args) { List list = new ArrayList(); list.add("qqyumidi"); list
RAID磁碟陣列是什麼(一看就懂)
在單機時代,採用單塊磁碟進行資料儲存和讀寫的方式,由於定址和讀寫的時間消耗,導致I/O效能非常低,且儲存容量還會受到限制。另外,單塊磁碟極其容易出現物理故障,經常導致資料的丟失。因此大家就在想,有沒有一種辦法將多塊獨立的磁碟結合在一起組成一個技術方案,來提高資料的可靠性和I/O效能呢。 在這種情況下,R
【圖文解析】Spring瞭解一下啊,圖文解釋,一看就懂小老弟!
1.Spring簡介 什麼是Spring: spring產生於2003年,輕量級javase/ee一站式開源框架。 spring在三層架構的地位: 表示層:SpringMVC/struts2 業務邏輯層:Spring fra
一看就懂,Python 日誌模組詳解及應用
日誌概述 百度百科的日誌概述: Windows網路作業系統都設計有各種各樣的日誌檔案,如應用程式日誌,安全日誌、系統日誌、Scheduler服務日誌、FTP日誌、WWW日誌、DNS伺服器日誌等等,這些根據你的系統開啟的服務的不同而有所不同。我們在系統上進行一些操作時,這些日誌檔案通常會記錄下我們操作的一些
作業系統-程序通訊(訊號量、匿名管道、命名管道、Socket)
程序通訊(訊號量、匿名管道、命名管道、Socket) 具體的概念就沒必要說了,參考以下連結。 訊號量 匿名管道 命名管道 Socket Source Code: 1. 訊號量(生產者消費者問題) 1 #include <iostream>
前端初學者一看就懂:Ajax呼叫後臺介面案例
一直以來很多初學者對於ajax呼叫後臺介面總是不能很明白,以下這個案例,能很清楚的過程展現給大家: 首先,要做這個功能前,我們必須先查閱後臺介面文件,瞭解使用登入介面時,需要提交哪些引數,並且介面使用返回的資料。 這裡我使用了一個返回json格式資料的登入介面為例,講解怎
2018年9月蘋果ios退款全部可用流程教程,非常詳細一看就懂,大家快進來看看
蘋果iOS內購退款2018年1月份開始相信大家都感覺得到他的退款金額和時間都被減少壓縮了,臨近過年了,很多遊戲開發商對蘋果公司的抱怨一直沒停,都要求蘋果公司把退款這樣機制取消,嚴重影響了他們的收益。蘋果公司在多個遊戲公司巨頭的施壓之下,也對退款這方面的要求進行了
詳細講解transform,一看就懂了!(贊)
前面我們一起學習了CSS3中的漸變、圓角、陰影等幾個屬性的使用,今天開始我們一起來學習有關於CSS3製作動畫的幾個屬性:等更高階的CSS3技術。本文主要介紹的是這三個屬性之中的第一個──變形transform。 Transform字面上就是變形,改變的意思。在CSS3中