【IPC進程間通訊之三】記憶體對應檔Mapping File

來源:互聯網
上載者:User

標籤:處理序間通訊   記憶體對應檔   共用記憶體   mapping file   

IPC處理序間通訊+共用記憶體Mapping               IPC(Inter-Process Communication,處理序間通訊)。         檔案對應(Mapping)是一種將檔案內容映射到記憶體位址的技術,通過對映射記憶體,讀寫檔案如同讀寫記憶體一般簡單。        多個進程映射同一個檔案對應物件,也即多個進程映射到同一個實體儲存體頁面,因此,當一個進程向映射記憶體寫入資料時,其他進程可以通過映射記憶體讀取資料,通過這個機制實現處理序間通訊。                  1.記憶體檔案對應Mapping File :
         A進程建立一個命名的Mapping對象,並在映射記憶體中寫入需要共用的資料。B進程通過對象名開啟Mapping對象,映射該Mapping對象,從映射記憶體中讀取資料。
       2.基本API函數 : 創建Mapping對象:         HANDLE    CreateFileMapping(
                           HANDLE      hFile,                                   //物理檔案控制代碼
                           LPSECURITY_ATTRIBUTES    lpAttributes, //安全設定
                           DWORD      flProtect,                                      //保護設定
                           DWORD      dwMaximumSizeHigh,         //高位檔案大小
                           DWORD      dwMaximumSizeLow,          //低位檔案大小
                           LPCTSTR   lpName                                   //共用記憶體名稱
);
        該函數返回建立的Mapping對象。 建立映射記憶體:         LPVOID  MapViewOfFile(
                      HANDLE    hFileMappingObject,               //Mapping對象
                         DWORD     dwDesiredAccess,                        //存取類別
                         DWORD     dwFileOffsetHigh,                  //對應檔高位
                         DWORD     dwFileOffsetLow,                    //對應檔地位
                         SIZE_T        dwNumberOfBytesToMap       //映射位元組數
);
        該函數用於建立Mapping對象的映射記憶體,返回映射記憶體。 記憶體複製:         VOID  CopyMemory(
                    PVOID Destination,                //要複製記憶體塊的目的地址
                    CONST VOID *Source,              //要複製記憶體塊的源地址
                    SIZE_T Length                                          //複製的位元組數
);
       該函數用於將資料複製到映射記憶體。 開啟Mapping對象:        HANDLE  OpenFileMapping(
                         DWORD   dwDesiredAccess ,   // 存取許可權
                         BOOL       bInheritHandle ,       //繼承設定,一般設為FALSE
                         LPCTSTR    lpName                  // Mapping對象名
);
      該函數用於開啟一個存在的Mapping對象。返回Mapping物件控點。           3.牛刀小試:      先在VC6.0中運行process1程式,在運行process2程式:
         運行效果:
process1程式: process2 程式:


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.