• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Linux共享内存编程示例

    一、概念

    共享内存是被多个进程共享的一部分物理内存,是进程间共享数据的最快的一种方法。
     
    二、实现

    分为两个步骤:
    1、创建共享内存。
    2、映射共享内存。
    1、创建

    复制代码
    代码如下:

    int shmget(key_t key, int size, int shmflg)

    当key的取值为 IPC_PRIVATE 时,将创建一块新的共享内存。shmflg至少设为S_IRUSR|S_IWUSR否则会出现读写错误。成功返回内存标示符,失败返回-1。
    2、映射

    复制代码
    代码如下:

    int shmat(int shmid, char *shmaddr, int flag)

    shmaddr为共享内存的起始地址。flag对内存的操作模式。通常命令可写为:shmat(shmid,NULL,0);
     
    成功返回共享内存的起始地址,失败返回-1。
     
    三、举例

    复制代码
    代码如下:

    #includesys/stat.h>
    #includesys/ipc.h>
    #includesys/shm.h>
    #includememory.h>
    #includefcntl.h>
    #define PERM S_IRUSR|S_IWUSR/p> p>int main(int argc ,char *argv[]){
    int shmid;
    pid_t pid;
    if(argc!=2){
    printf("Usage: shmA [string]\n");
    return -1;
    }
    if((shmid=shmget(IPC_PRIVATE,1024,PERM))0){
    printf("shared memory create error!\n");
    _exit(1);
    }
    char *p;
    pid=fork();
    if(pid ==0){
    sleep(1);
    p=shmat(shmid,NULL,0);
    memset(p,'\0',1024);
    strcpy(p,argv[1]);
    printf("already written!!! It's %s \n",p);
    }
    else{
    wait(NULL);
    p = shmat(shmid,NULL,0);
    printf("read from memory %s \n",p);
    }
    return 0;
    }
          

    子进程写入argv[1],父进程输出argv[1]的值。
     

    上一篇:Linux管道通信C语言编程示例
    下一篇:Linux消息队列编程示例
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Linux共享内存编程示例 Linux,共享,内存,编程,示例,