• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            統計

            • 隨筆 - 50
            • 文章 - 42
            • 評論 - 147
            • 引用 - 0

            留言簿(6)

            隨筆分類

            文章分類

            Link

            搜索

            •  

            積分與排名

            • 積分 - 165535
            • 排名 - 159

            最新評論

            閱讀排行榜

            評論排行榜

            創建一塊命名的進程共享存儲空間

            多個進程可以通過在系統頁面文件中存儲的內存映射文件來實現多個進程共享數據。

            第一個進程

            The first process creates the file mapping object by calling the CreateFileMapping function with INVALID_HANDLE_VALUE and a name for the object. By using the PAGE_READWRITE flag, the process has read/write permission to the memory through any file views that are created.

            Then the process uses the file mapping object handle that CreateFileMapping returns in a call to MapViewOfFile to create a view of the file in the process address space. The MapViewOfFile function returns a pointer to the file view, pBuf. The process then uses the CopyMemory function to write a string to the view that can be accessed by other processes.

            When the process no longer needs access to the file mapping object, it should call the CloseHandle function. When all handles are closed, the system can free the section of the paging file that the object uses.

            第一個進程通過調用以INVALID_HANDLE_VALUE 為參數的CreateFileMapping方法創建一個命名的內存映射文件對象。通過使用PAGE_READWRITE 標識,進程可通過任何以創建文件視圖獲得文件讀寫權限。
            然后進程使用CreateFileMapping 返回的對象句柄作為參數調用MapViewOfFile 方法在進程地址空間內創建一個文件視圖。MapViewOfFile 返回一個文件視圖的指針。進程可以調用CopyMemory 方法寫一段字串到文件視圖,而該視圖可以被其他進程訪問。
            當進程不在需要訪文件映射對象是,應該調用CloseHandle 方法。當所有的進程都關閉后,系統會釋放對象所使用的頁面文件。
             1#include <windows.h>
             2#include <stdio.h>
             3#include <conio.h>
             4
             5#define BUF_SIZE 256
             6TCHAR szName[]=TEXT("Global\\MyFileMappingObject");
             7TCHAR szMsg[]=TEXT("Message from first process");
             8
             9int main()
            10{
            11   HANDLE hMapFile;
            12   LPCTSTR pBuf;
            13
            14   hMapFile = CreateFileMapping(
            15                 INVALID_HANDLE_VALUE,    // use paging file使用系統頁面文件
            16                 NULL,                    // default security 
            17                 PAGE_READWRITE,          // read/write access
            18                 0,                       // max. object size 
            19                 BUF_SIZE,                // buffer size  
            20                 szName);                 // name of mapping object
            21 
            22   if (hMapFile == NULL) 
            23   
            24      printf("Could not create file mapping object (%d).\n"
            25             GetLastError());
            26      return 1;
            27   }

            28   pBuf = (LPTSTR) MapViewOfFile(hMapFile,   // handle to map object
            29                        FILE_MAP_ALL_ACCESS, // read/write permission
            30                        0,                   
            31                        0,                   
            32                        BUF_SIZE);           
            33 
            34   if (pBuf == NULL) 
            35   
            36      printf("Could not map view of file (%d).\n"
            37             GetLastError()); 
            38      return 2;
            39   }

            40
            41   
            42   CopyMemory((PVOID)pBuf, szMsg, strlen(szMsg));
            43   _getch();
            44
            45   UnmapViewOfFile(pBuf);
            46
            47   CloseHandle(hMapFile);
            48
            49   return 0;
            50}

            51

            第二個進程

            A second process can access the string written to the shared memory by the first process by calling the OpenFileMapping function specifying the same name for the mapping object as the first process. Then it can use the MapViewOfFile function to obtain a pointer to the file view, pBuf. The process can display this string as it would any other string. In this example, the message box displayed contains the message "Message from first process" that was written by the first process.
            第二個進程可以通過OpenFileMapping 方法并且指定與第一個進程中相同的內存映射文件對象名稱來訪問共享內存中的字串。然后可通過MapViewOfFile 方法得到文件視圖的指針pBuf

             1#include <windows.h>
             2#include <stdio.h>
             3#include <conio.h>
             4
             5#define BUF_SIZE 256
             6TCHAR szName[]=TEXT("Global\\MyFileMappingObject");
             7
             8int main()
             9{
            10   HANDLE hMapFile;
            11   LPCTSTR pBuf;
            12
            13   hMapFile = OpenFileMapping(
            14                   FILE_MAP_ALL_ACCESS,   // read/write access
            15                   FALSE,                 // do not inherit the name
            16                   szName);               // name of mapping object 
            17 
            18   if (hMapFile == NULL) 
            19   
            20      printf("Could not open file mapping object (%d).\n"
            21             GetLastError());
            22      return 1;
            23   }
             
            24 
            25   pBuf = (LPTSTR) MapViewOfFile(hMapFile, // handle to map object
            26               FILE_MAP_ALL_ACCESS,  // read/write permission
            27               0,                    
            28               0,                    
            29               BUF_SIZE);                   
            30 
            31   if (pBuf == NULL) 
            32   
            33      printf("Could not map view of file (%d).\n"
            34             GetLastError()); 
            35      return 2;
            36   }

            37
            38   MessageBox(NULL, pBuf, TEXT("Process2"), MB_OK);
            39
            40   UnmapViewOfFile(pBuf);
            41
            42   CloseHandle(hMapFile);
            43 
            44   return 0;
            45}

            46

            更多內容參照http://baike.baidu.com/view/394293.htm

            posted on 2008-11-27 22:51 pear_li 閱讀(519) 評論(0)  編輯 收藏 引用 所屬分類: windows kernel

            久久久久亚洲AV成人网人人网站 | 青青青青久久精品国产 | 国产精品亚洲综合专区片高清久久久| 国产精品久久久久jk制服| 婷婷综合久久狠狠色99h| 久久黄色视频| 久久夜色精品国产噜噜噜亚洲AV| 久久综合久久久| 亚洲中文字幕无码久久综合网| 国产精品18久久久久久vr| 亚洲欧美久久久久9999 | 久久久久久精品免费免费自慰| 国产成人久久激情91| 久久这里只有精品首页| 99久久99久久精品国产| 久久久国产精品亚洲一区| 伊人久久无码精品中文字幕| 91精品国产色综合久久| 亚洲国产欧洲综合997久久| 久久久久亚洲AV无码去区首| 国产精品久久久久9999| 亚洲国产精品无码久久一区二区| 国产精品永久久久久久久久久 | 久久综合久久久| 久久精品人人做人人妻人人玩| 一本久久综合亚洲鲁鲁五月天| 国内精品伊人久久久久影院对白| .精品久久久麻豆国产精品| 久久久亚洲欧洲日产国码aⅴ| 国产精品久久久久免费a∨| 欧美性大战久久久久久| 伊人久久综在合线亚洲2019| 69SEX久久精品国产麻豆| 精品无码久久久久国产| 久久久精品人妻一区二区三区蜜桃| 亚洲午夜久久久久妓女影院| 久久婷婷国产剧情内射白浆| 久久成人国产精品免费软件| 国产69精品久久久久久人妻精品| 久久精品国产亚洲AV香蕉| 国内精品久久国产|