c++共享内存(转载)

对于连个不同的进程之间的通信,共享内存是一种比较好的方式,一个进程把数据发送到共享内存中,

另一个进程可以读取改数据,简单记录一下代码

 1 #define BUF_SIZE 256
 2 TCHAR szName[]=TEXT("Global\\YourFileMappingObject");    //指向同一块共享内存的名字
 3
 4 int SetFileName(LPCTSTR str)
 5 {
 6     HANDLE hMapFile;
 7     LPCTSTR pBuf;
 8
 9     hMapFile = CreateFileMapping(
10             INVALID_HANDLE_VALUE,    // use paging file
11             NULL,                    // default security
12             PAGE_READWRITE,          // read/write access
13             0,                       // maximum object size (high-order DWORD)
14             BUF_SIZE,                // maximum object size (low-order DWORD)
15             szName);                 // name of mapping object
16
17     if (hMapFile == NULL)
18     {
19         _tprintf(TEXT("Could not create file mapping object (%d).\n"),
20         GetLastError());
21         return 0;
22     }
23     pBuf = (LPTSTR) MapViewOfFile(hMapFile,   // handle to map object
24             FILE_MAP_ALL_ACCESS, // read/write permission
25             0,
26             0,
27             BUF_SIZE);
28
29     if (pBuf == NULL)
30     {
31         _tprintf(TEXT("Could not map view of file (%d).\n"),
32         GetLastError());
33
34         CloseHandle(hMapFile);
35
36         return 0;
37     }
38
39     memcpy((PVOID)pBuf, str, BUF_SIZE);
40     return 1;
41 }
42
43 LPCTSTR GetBuffer()
44 {
45     HANDLE hMapFile;
46     LPCTSTR pBuf;
47
48     hMapFile = CreateFileMapping(
49             INVALID_HANDLE_VALUE,    // use paging file
50             NULL,                    // default security
51             PAGE_READWRITE,          // read/write access
52             0,                       // maximum object size (high-order DWORD)
53             BUF_SIZE,                // maximum object size (low-order DWORD)
54             szName);                 // name of mapping object
55
56     if (hMapFile == NULL)
57     {
58         _tprintf(TEXT("Could not create file mapping object (%d).\n"),
59             GetLastError());
60         return NULL;
61     }
62     pBuf = (LPTSTR) MapViewOfFile(hMapFile,   // handle to map object
63             FILE_MAP_ALL_ACCESS, // read/write permission
64             0,
65             0,
66             BUF_SIZE);
67
68     if (pBuf == NULL)
69     {
70         _tprintf(TEXT("Could not map view of file (%d).\n"),
71                 GetLastError());
72
73         CloseHandle(hMapFile);
74         return NULL;
75     }
76     return pBuf;
77 }
时间: 2024-08-06 07:58:59

c++共享内存(转载)的相关文章

(转载)linux下的僵尸进程处理SIGCHLD信号Linux环境进程间通信(五): 共享内存(下)

Linux环境进程间通信(五): 共享内存(下) 在共享内存(上)中,主要围绕着系统调用mmap()进行讨论的,本部分将讨论系统V共享内存,并通过实验结果对比来阐述两者的异同.系统V共享内存指的是把所有共享数据放在共享内存区域(IPC shared memory region),任何想要访问该数据的进程都必须在本进程的地址空间新增一块内存区域,用来映射存放共享数据的物理内存页面. 系统调用mmap()通过映射一个普通文件实现共享内存.系统V则是通过映射特殊文件系统shm中的文件实现进程间的共享内

inux内存映射和共享内存理解和区别

可以看到内存映射中需要的一个参数是int fd(文件的标识符),可见函数是通过fd将文件内容映射到一个内存空间, 我需要创建另一个映射来得到文件内容并统计或修改,这时我创建这另一个映射用的仍是mmap函数, 它仍需要用到fd这个文件标识,那我不等于又重新打开文件读取文件里的数据 1.既然这样那同对文件的直接操作有什么区别呢? 2.映射到内存后通过映射的指针addr来修改内容的话是修改共享内存里的内容还是文件的内容呢? 3.解决上面2个问题,我还是想确切知道共享内存有什么用??? 一种回答|: 1

Linux下使用awk批量删除共享内存

1.awk简介 awk 是一个强大的文本分析工具.sed 常常用于一整个行的处理,而 awk 则倾向于以空格和tab键为默认分隔符将每行切片成一个个域(也就是一列)来处理.awk适用于小型的数据处理. awk有3个不同版本: awk.nawk和gawk,未作特别说明,一般指gawk,gawk 是 awk 的 GNU 版本. 2. awk语法格式 awk 'pattern1{action1} pattern2{action2} -' filename awk 后面接两个单引号并加上大括号 {} 来

管道,信号量,共享内存,socket的实际使用场景和NSPipe管道的使用

找了很久也没有找到NSPipe在IOS方面的常规使用().我试了半天终于找到它的正常的使用方法,我想对很多想使用管道会有很大的帮助.阿门,看来我是第一个吃螃蟹的人. 进程和线程间四大通信机制:管道,信号量,共享内存,socket. 四大通信机制的实际使用场景 管道是单向的.先进先出的,它把一个进程的输出和另一个进程的输入连接在一起.一个进程(写进程)在管道的尾部写入数据,另一个进程(读进程)从管道的头部读出数据.NSPipe包含两个文件描述符,读文件描述符合写文件描述.管道通常用在两个线程间通信

Windows环境下共享内存通信

一.引言 在Windows程序中,各个进程之间常常需要交换数据,进行数据通讯.WIN32 API提供了许多函数使我们能够方便高效的进行进程间的通讯,通过这些函数我们可以控制不同进程间的数据交换. 进程间通讯(即:同机通讯)和数据交换有多种方式:消息.共享内存.匿名(命名)管道.邮槽.Windows套接字等多种技术."共享内存"(shared memory)可以定义为对一个以上的进程是可见的内存或存在于多个进程的虚拟地址空间.例如:如果两个进程使用相同的DLL,只把DLL的代码页装入内存

一张图深度解析Linux共享内存的内核实现

一张图深度解析Linux共享内存的内核实现 Sailor_forever  sailing_9806#163.com http://blog.csdn.net/sailor_8318/article/details/39484747 (本原创文章发表于Sailor_forever 的个人blog,未经本人许可,不得用于商业用途.任何个人.媒体.其他网站不得私自抄袭:网络媒体转载请注明出处,增加原文链接,否则属于侵权行为.如有任何问题,请留言或者发邮件给sailing_9806#163.com)

PHP共享内存的应用shmop系列

简单的说明 可能很少情况会使用PHP来操控共享内存,一方面在内存的控制上,MC已经提供了一套很好的方式,另一方面,自己来操控内存的难度较大,内存的读写与转存,包括后面可能会用到的存储策略,要是没有一定计算机组成原理的基础,想做这些不是一件容易的事情.那为什么还要使用它呢?如果我想进行管道通信,为其它的应用服务准备数据:我想建立自己的数据缓存体系,使用MC有点大炮打苍蝇的感觉.那么shmop会是一个选择,当然,在操作内存前,一定要谨慎. 系统要求 shmop系列函数只是在unix/Linux下可用

linux_c开发(5-4)进程间通讯_共享内存通讯

共享内存 共享内存 是被多个进程共享的一部分物理内存.共享内存是进程间共享数据的一种最快方法,一个进程向共享内存写入了数据,共享这个内存的所有进程就可以立刻看到其中内容. 共享内存实现分为两个步骤 1.创建共享内存,使用shmget函数. 2.映射共享内存,将创建的这段共享内存映射到具体的进程空间去,使用shmat函数. int shmget(key_t key,int size,int shmflg) key标志共享内存的键值:O/IPC_PRIVATE.当key的取值为IPC/PRIVATE

Linux IPC之共享内存C 事例

Linux IPC之共享内存 标签: linuxrandomnull工作 2011-08-25 11:52 4123人阅读 评论(0) 收藏 举报  分类: Linux(3)  读书札记(3)  版权声明:本文为博主原创文章,未经博主允许不得转载. 简介 共享内存(shared memory)是最简单的Linux进程间通信方式之一.使用共享内存,不同进程可以对同一块内存进行读写.由于所有进程对共享内存的访问就和访问自己的内存空间一样,而不需要进行额外系统调用或内核操作,同时还避免了多余的内存拷贝