首页 > 代码库 > 进程间通信之 共享内存
进程间通信之 共享内存
共享存储允许两个或多个进程共享一给定的存储区。因为数据不需要在客户机和
服务器之间复制,所以这是最快的一种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 }
进程间通信之 共享内存
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。