zoukankan      html  css  js  c++  java
  • 进程间通信之 共享内存

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

    服务器之间复制,所以这是最快的一种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
    ");
    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
    ",a);
    19     int i =20;
    20     if(0 == pid)
    21     {
    22         while(i--)
    23         {
    24             printf("%d
    ",a[0]);
    25             sleep(1);
    26         }
    27         shmctl(shmid,IPC_RMID,NULL);
    28         printf("mem del
    ");
    29     }
    30     if(pid > 0)
    31     {
    32         while(1)
    33         {
    34             a[0]++;
    35             sleep(1);
    36         }
    37     }
    38     
    39     return 0;
    40 }



  • 相关阅读:
    js node 操作
    深入认识javascript中的eval函数
    连接到网页objectivec
    web.config的数据库连接字符串进行加密
    fontsize和font标签的size属性的区别
    js改变背景图片
    MS:Chart:Series 成員 饼图 文字Label 显示在饼外
    读取plist文件
    js判断undefined类型
    当用updatepanel和scriptmanager时,弹出框
  • 原文地址:https://www.cnblogs.com/be-m/p/4271061.html
Copyright © 2011-2022 走看看