linux中进程共享内存的2种方法
2016-11-20 21:42
381 查看
共享内存可以在两个或多个进程间共享一个给定的内存区域,因为数据不需要在进程之间复制,相比于pipe、socket、file等共享通信方式,共享内存是最快的一种共享机制。linux中共享内存一般有2种方法即:shared memory和mmap。
原文:小宇的博客
下面两个例子都是首先在主进程里创建一段共享内存,然后通过fork创建一个子进程。子进程在共享内存里写入Hello world,父进程等待子进程退出之后读取共享内存中的内容并显示出来。
下面通过两个实例源码来介绍。
原文:小宇的博客
下面两个例子都是首先在主进程里创建一段共享内存,然后通过fork创建一个子进程。子进程在共享内存里写入Hello world,父进程等待子进程退出之后读取共享内存中的内容并显示出来。
下面通过两个实例源码来介绍。
shmat
#include<unistd.h> #include<stdio.h> #include<stdlib.h> #include<string.h> #include<errno.h> #include<sys/types.h> #include<sys/wait.h> #include<sys/ipc.h> #include<sys/shm.h> int main() { int shmid = shmget(IPC_PRIVATE,100,IPC_CREAT|IPC_EXCL|0600); char *mem = (char *)shmat(shmid,0,0); if (shmid == -1) { printf("shmget error:%s\n",strerror(errno)); exit(1); } pid_t pid = fork(); if (pid < 0) { printf("fork failed!\n"); exit(1); } if (pid == 0) { char *str = "Hello world!\n"; memcpy(mem,str,strlen(str)+1); exit(1); } if (pid > 0) { wait(NULL); printf("%s",mem); exit(1); } }
$ ./shm Hello world!
mmap
#include<unistd.h> #include<stdio.h> #include<stdlib.h> #include<string.h> #include<sys/mman.h> #include<errno.h> #include<sys/types.h> #include<sys/wait.h> int main() { char *mem = (char *)mmap(NULL,sizeof(char)*100,PROT_READ|PROT_WRITE,MAP_SHARED|MAP_ANONYMOUS,-1,0); if ((void *)mem == (void *)-1) { printf("mmap error: %s\n",strerror(errno)); exit(1); } pid_t pid = fork(); if (pid < 0) { printf("fork failed!\n"); exit(1); } if (pid == 0) { char *str = "Hello world!\n"; memcpy(mem,str,strlen(str)+1); exit(1); } if (pid > 0) { wait(NULL); printf("%s",mem); exit(1); } }
$ ./mmap Hello world!
相关文章推荐
- 将 Win32 C/C++ 应用程序迁移到 POWER 上的 Linux,第 1 部分: 进程、线程和共享内存服务 (转载)
- Linux 下查看修改共享内存的方法
- linux进程间内存共享---mmap
- Linux的进程编程-之二-进程间通信(共享内存)
- 进程内存共享的方法
- linux 进程间的通信(五) 共享内存-1
- linux进程通讯-共享内存1
- UNIX/LINUX编程学习之进程通信--共享内存
- 查看linux被隐藏进程的内存占用方法,可用于监控进程是否内存泄漏
- linux进程通信:共享内存(转)
- Linux用户进程内存泄露一种检测方法
- Linux下通过共享内存进行进程间通信,进程间同步使用信号量来实现
- linux进程通讯-共享内存
- 两个或多个进程之间通过Win32 API实现内存共享的方法(转)
- linux 进程间共享内存
- linux进程通讯-共享内存http://doc.chinaunix.net/linux/201010/996044.shtml
- linux进程通讯-共享内存
- Linux下通过共享内存进行进程间通信,进程间同步使用信号量来实现
- Linux进程通信总结(三) --共享内存
- Linux进程通信-共享内存