1. 程式人生 > >程序間通訊IPC總結

程序間通訊IPC總結

1.各個IPC通訊的原理:

ipc原理1:讓兩個程序各自的虛擬地址對應記憶體上同一個實體地址!(程序空間,記憶體空間)
FileMapping—IPC
Point—IPC
ShareDllData—IPC
ipc原理2:利用作業系統訊息佇列的三種訊息傳遞(自定義訊息,系統訊息,拷貝訊息)
UserMsg—IPC
Msg—IPC
ipc原理3:利用其他方式(管道,郵筒)進行訊息傳遞
NamedPipe-IPC
MailSlot-IPC

具體如下:

FileMapping-IPC
先要使用函式CreateFileMapping來建立一個想共享的檔案資料控制代碼,然後使用MapViewOfFile來獲取共享的記憶體地址,然後使用OpenFileMapping函式在另一個程序裡開啟共享檔案的名稱,這樣就可以實現不同的程序共享資料。
Point-IPC
呼叫了兩套函式:__NtWow64ReadVirtualMemory64/ReadProcessMemory來讀寫同一個虛擬記憶體
ShareDllData-IPC
設定某一塊實體記憶體為“共享讀共享寫”,對其寫的時候就不會觸發作業系統的拷貝寫。
這裡是不同的程序同時載入一個動態庫
UserMsg-IPC
自定義訊息
Msg-IPC
自定義訊息,系統訊息,字串訊息:拷貝訊息
NamedPipe-IPC
建立管道的過程是管道伺服器。連線到管道的程序是管道客戶端。
一個程序將資訊寫入管道,然後另一個程序從管道讀取資訊。


為每個管道例項建立一個事件物件,用於實現重疊IO;為每個管道例項分配一個執行緒,用於響應客戶端的請求
MailSlot-IPC
郵筒




2.各個IPC通訊的特點:


FileMapping-IPC
Point-IPC
可以做到32位->32位,64位->64位,32位->64位的
ShareDllData-IPC
因為這裡是不同的程序同時載入一個動態庫,所以要求兩個程序的位數必須與dll相同,即只能使32位與32位通訊,64位與64位的通訊。
UserMsg-IPC
Msg-IPC
使用了作業系統的訊息佇列,所以可以做到程序32位,64位通用!但是同樣受限於此,只能做到四個位元組(或者八個位元組)的數字資料通訊!
只能傳送四個位元組或八個位元組分別對應著使用L參(LPARAM)或是L參和W參(LPARAM,WPARAM)
NamedPipe-IPC
MailSlot-IPC
使用訊息的這後四種方式都可以進行程序32位,64位通用!

這兩種分別使用管道和郵筒的方式不受限與傳送的資料大小。

ClipBoard-IPC剪貼簿還沒學尷尬

相關推薦

程序通訊IPC總結

1.各個IPC通訊的原理: ipc原理1:讓兩個程序各自的虛擬地址對應記憶體上同一個實體地址!(程序空間,記憶體空間) FileMapping—IPC Point—IPC ShareDllData

linux程序通訊(IPC)機制總結

在linux下的多個程序間的通訊機制叫做IPC(Inter-Process Communication),它是多個程序之間相互溝通的一種方法。在linux下有多種程序間通訊的方法:半雙工管道、命名管道、訊息佇列、訊號、

Linux程序通訊IPC的幾種方式簡介

Linux程序通訊的源頭       linux下的程序通訊手段基本上是從Unix平臺上的程序通訊手段繼承而來的。而對Unix發展做出重大貢獻的兩大主力AT&T(原為American Telephone & Tele

Android系統程序通訊 IPC 機制Binder中的Server啟動過程原始碼分析

                        在前面一篇文章中,介紹了在Android系統中Binder程序間通訊機制中的Server角色是如何獲得Service Manager遠端介面的,即defaultServiceManager函式的實現。Server獲得了Service Manager遠端介面之後,

程序通訊方式總結——訊息佇列

        Linux/Unix系統IPC是各種程序間通訊方式的統稱,但是其中極少能在所有Linux/Unix系統實現中進行移植。隨著POSIX和Open Group(X/Open)標準化的推進

Linux程序通訊(IPC)程式設計實踐(十二)Posix訊息佇列--基本API的使用

posix訊息佇列與system v訊息佇列的差別: (1)對posix訊息佇列的讀總是返回最高優先順序的最早訊息,對system v訊息佇列的讀則可以返回任意指定優先順序的訊息。 (2)當往一個空佇列放置一個訊息時,posix訊息佇列允許產生一個訊號或啟動一個執行緒,

3. 程序通訊IPC

一、概念 IPC:     1)在linux環境中的每個程序各自有不同的使用者地址空間。任何一個程序的全域性變數在另一個程序中都看不到,所以程序和程序之間是不能相互訪問。     2)如果程序間要交換資料必須通過核心,在核心中開闢一塊緩衝區,程

linux 程序通訊方式總結

對linux 程序通訊的一點簡單總結,主要包括 管道通訊,還有 system v, posix 標準的 訊息佇列,訊號量,共享記憶體方式。 基於管道的通訊主要包括有名管道,和無名管道,所謂的有名管道,就是建立的時候會帶有具體的標識,以便於確認對誰操作,而無名管道是建立沒有名字的管道,

Android程序通訊(IPC)之Socket

Socket也被稱為“套接字”程式設計,它分為流式套接字和使用者資料套接字兩種,分別對應於網路傳輸控制中層中TCP和UDP協議。TCP協議是面向連線的協議,提供穩定的雙向通訊功能,TCP連線的建立需要經過”三次握手”才能實現,為了實現穩定的資料傳輸功能,其本身提

Linux程序通訊(IPC)程式設計實踐(十)System V訊號量---PV操作經典題目

//P原語     //P(semaphore *S)     wait(semaphore *S)       {           -- S->value;           if (S->value < 0)           {   

程序通訊方式總結(windows 和linux)

平時看的書很多,瞭解的也很多,但不喜歡總結,這不昨天面試的時候被問到了程序間通訊的方式,因為沒有認真總結過,所以昨天答得不是特別好。現在將linux和windows的程序間通訊方式好好總結一下。           windows的程序間的通訊方式有1.檔案對映;2. 共

Linux---程序通訊IPC之管道

**程序間通訊(IPC):**是指在不同程序之間傳播或交換資訊。 **IPC的方式:**通常有管道(無名管道、命名管道)、訊息佇列、訊號量、共享儲存、Socket、Streams等(Socket和Streams支援不同主機上的兩個程序IPC) 程序間通訊的目的:

程序通訊方式總結——管道(一)

         Linux/Unix系統IPC是各種程序間通訊方式的統稱,但是其中極少能在所有Linux/Unix系統實現中進行移植。隨著POSIX和Open Group(X/Open)標準化的推

程序通訊(IPC)之訊息佇列

★IPC方法包括管道(PIPE)、訊息佇列(Message_Queue)、旗語、共用記憶體(ShareMemory)以及套接字(Socket)。進 程間通訊主要包括了管道、系統IPC(包括了訊息佇列、

程序通訊方式總結(適用初學者)

前言:linux的程序間通訊概述 1、為什麼需要程序間通訊       (1)程序間通訊(IPC)指的是2個任意程序之間的通訊。       (2)同一個程序在一個地址空間中,所以同一個程序的不同模組(不同函式、不同檔案)之間都是很簡單的(很多時候都是全域性變數、也可以通

Linux---程序通訊IPC之訊息佇列

**程序間通訊(IPC):**是指在不同程序之間傳播或交換資訊。 **IPC的方式:**通常有管道(無名管道、命名管道)、訊息佇列、訊號量、共享儲存、Socket、Streams等(Socket和Streams支援不同主機上的兩個程序IPC) 程序間通訊的目

Linux程序通訊——IPC共享記憶體學習筆記

一、什麼是共享記憶體 共享記憶體就是允許兩個不相關的程序訪問同一個邏輯記憶體。共享記憶體是在兩個正在執行的程序之間共享和傳遞資料的一種非常有效的方式。不同程序之間共享的記憶體通常安排為同一段實體記憶體。程序可以將同一段共享記憶體連線到它們自己的地址空間中,所有

程序通訊(IPC)之訊號量

★IPC方法包括管道(PIPE)、訊息佇列(Message_Queue)、訊號量(semaphore)、共用記憶體 (ShareMemory)以及套接字(Socket)。程序間通訊主要包括了管道、系統IPC(包括了訊息佇列、訊號以 及共享儲存)、套接字(SOCKET)。此文

Linux---程序通訊IPC之共享記憶體

程序間通訊(IPC):是指在不同程序之間傳播或交換資訊。 IPC的方式:通常有管道(無名管道、命名管道)、訊息佇列、訊號量、共享儲存、Socket、Streams等(Socket和Streams支援不同主機上的兩個程序IPC) 程序間通訊的目的: 1

Linux程序通訊(IPC)程式設計實踐(三) 詳解System V訊息佇列(1)

訊息佇列簡介 訊息佇列提供了一個從一個程序向另外一個程序傳送一塊資料的方法(本機);每個資料塊都被認為是有一個型別,接收者程序接收的資料塊可以有不同的型別值。訊息佇列也有管道一樣的不足:  (1)每