80.共享内存实现进程通信

  • 服务器创建共享内存
     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 #include<Windows.h>
     4 
     5 #define  SIZE 4096
     6 //指针标识首地址
     7 LPVOID lpdata = NULL;
     8 
     9 
    10 void main()
    11 {
    12     if (lpdata!=NULL)
    13     {
    14         puts("共享内存存在");
    15     }
    16     //创建共享内存
    17     HANDLE hmap = CreateFileMappingA(INVALID_HANDLE_VALUE, NULL,
    18         PAGE_READWRITE | SEC_COMMIT, 0, SIZE, "cgwmem");
    19 
    20     if (hmap==NULL)
    21     {
    22         puts("创建失败");
    23     }
    24     else
    25     {
    26         //映射文件到指针
    27         lpdata = MapViewOfFile(hmap, FILE_MAP_READ | FILE_MAP_WRITE, 0, 0, 0);
    28 
    29         int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
    30         memcpy(lpdata, a, 40);
    31     }
    32 
    33     system("pause");
    34 
    35 
    36     UnmapViewOfFile(lpdata);//解除
    37     CloseHandle(hmap);
    38     system("pause");
    39 
    40 
    41 }
  • 服务器使用这片共享内存
     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 #include<Windows.h>
     4 
     5 void main()
     6 {
     7     HANDLE hmapfile = OpenFileMappingA(FILE_MAP_READ, FALSE, "cgwgmem");
     8     if (hmapfile == NULL)
     9     {
    10         printf("开辟失败");
    11     }
    12 
    13     //创建指针,指向这片内存
    14     LPVOID lpbase = MapViewOfFile(hmapfile, FILE_MAP_READ, 0, 0, 0);
    15     if (lpbase == NULL)
    16     {
    17         printf("open失败");
    18 
    19     }
    20 
    21     int*p = lpbase;
    22     for (int i = 0; i < 10;i++)
    23     {
    24         printf("%d
    ", p[i]);
    25     }
    26 
    27 
    28     UnmapViewOfFile(lpbase);//解除
    29     CloseHandle(hmapfile);
    30 
    31 
    32     system("pause");
    33 }
原文地址:https://www.cnblogs.com/xiaochi/p/8455871.html