码迷,mamicode.com
首页 > 系统相关 > 详细

进程间通信之 共享内存

时间:2015-02-03 22:51:08      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:

共享存储允许两个或多个进程共享一给定的存储区。因为数据不需要在客户机和

服务器之间复制,所以这是最快的一种I P C。

使用共享存储的唯一窍门是多个进程之间对一给定存储区的同步(互斥访问)存取

。若服务器将数据放入共享存储区,则在服务器做完这一操作之前,客户机不应

当去取这些数据

共享内存创建过程:

1:获取IPC键值--------> key =ftok("./shmkey.txt",1);

2:获取标识符-------- >shmid = shmget(key,4096,0666|IPC_CREAT);

3:获取共享内存的地址---------->a = (char *)shmat(shmid,NULL,0);

此时就可以在不同的进程间用此共享内存了

具体程序实现:

 1 #include <sys/types.h>
 2 #include <sys/shm.h>
 3 #include <stdio.h>
 4 #include <string.h>
 5 #include <sys/ipc.h>
 6 
 7 int main()
 8 {
 9     key_t key;
10     int shmid;
11     pid_t pid;
12     if((pid = fork()) < 0)
13             printf("fork error\n");
14     char *a;
15     key =ftok("./shmkey.txt",1);
16     shmid = shmget(key,4096,0666|IPC_CREAT);
17     a = (char *)shmat(shmid,NULL,0);
18     //printf("addr = %p\n",a);
19     int i =20;
20     if(0 == pid)
21     {
22         while(i--)
23         {
24             printf("%d\n",a[0]);
25             sleep(1);
26         }
27         shmctl(shmid,IPC_RMID,NULL);
28         printf("mem del\n");
29     }
30     if(pid > 0)
31     {
32         while(1)
33         {
34             a[0]++;
35             sleep(1);
36         }
37     }
38     
39     return 0;
40 }

 



 

进程间通信之 共享内存

标签:

原文地址:http://www.cnblogs.com/be-m/p/4271061.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!