进程通信-共享内存-mmap()-code1
2011-08-30 17:13
381 查看
参考了sjmw888的用例,在其基础上做了修改,用于三个进程共享内存, 但每个进程只对特定区段改写.
简单模拟,未使用信号、信号量等来控制。
进程通信-共享内存-mmap()-code2
进程通信-共享内存-mmap()-code3
简单模拟,未使用信号、信号量等来控制。
/*-------------map_normalfile1.c-----------*/ /*来源:http://blog.csdn.net/sjmw888/article/details/5318667*/ #include <sys/types.h> #include <fcntl.h> #include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h> #include <sys/mman.h> typedef struct { char name[20]; int age; }people; int main(int argc, char** argv) { int fd,i; people *p_map; people *p_map_seg1; people *p_map_seg2; people *p_map_seg3; char temp[20]={0}; fd=open("map_normalfile.in", O_CREAT|O_RDWR|O_TRUNC, 00777); lseek(fd, sizeof(people)*30-1, SEEK_SET); write(fd, "", 1); printf("%d\n", lseek(fd, 0, SEEK_CUR) ); lseek(fd, 0, SEEK_SET); p_map = (people*)mmap( NULL,sizeof(people)*10*3,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0 ); p_map_seg1 = p_map; p_map_seg2 = p_map+10; p_map_seg3 = p_map+20; close( fd ); printf("p_map=0x%x\n", p_map); //在各个进程中映射同一文件, mmap返回的内存映像地址相同 printf("========Write Seg1===================\n"); for(i=0; i<10; i++) { sprintf(temp, "peple_1%02d", i); memcpy( ( *(p_map_seg1+i) ).name, temp, strlen(temp)+1); ( *(p_map_seg1+i) ).age = 10+i; printf( "name:%s age:%d;\n",(*(p_map_seg1+i)).name, (*(p_map_seg1+i)).age ); sleep(1); } printf(" initialize seg1 over \n "); sleep(10); printf("=========All Data==================\n"); for(i = 0;i<30;i++) { printf( "name=%s age=%d;\n",(*(p_map+i)).name, (*(p_map+i)).age ); } sleep(30); munmap( p_map, sizeof(people)*10*3 ); printf( "umap ok \n" ); return 0; }后续:
进程通信-共享内存-mmap()-code2
进程通信-共享内存-mmap()-code3
相关文章推荐
- 进程通信----共享内存以及mmap函数实现共享内存
- 进程通信-共享内存-mmap()
- 进程通信----共享内存以及mmap函数实现共享内存
- 进程通信-共享内存-mmap()-code2
- 进程通信-共享内存-mmap()-code3
- linux多线程【8】mmap实现父子进程的共享内存通信,用信号量同步
- Linux\Unix IPC进程通信实例分析(一):共享内存通信---文件映射mmap方式
- 使用mmap函数进行内核空间和用户空间的共享内存通信
- 通过共享内存,利用循环队列实现两个进程A,B之间的通信
- Linux进程通信总结(三) --共享内存
- 进程通信----共享内存
- 进程通信系列-共享内存
- 内存分配的原理__进程分配内存有两种方式,分别由两个系统调用完成:brk和mmap(不考虑共享内存)
- windows进程通信-内存共享和信号量
- linux进程通信----共享内存
- 【网络编程基础】Linux下进程通信方式(共享内存,管道,消息队列,Socket)
- Linux进程通信之共享内存
- 进程间的通信---共享内存
- linux下进程通信方式--共享内存
- UNIX系统中的进程通信之共享内存