zoukankan      html  css  js  c++  java
  • 父子进程共享内存通信的三种方法

    1.  mmap MAP_ANONYMOUS

    在支持MAP_ANONYMOUS的系统上,直接用匿名共享内存就可以,

    mmap(NULL, sizeof(int), PROT_READ|PROT_WRITE,   MAP_ANONYMOUS|MAP_SHARED, -1, 0);
    


    2. mmap  /dev/zero

           有些系统不支持匿名内存映射,则能够使用fopen打开/dev/zero文件,然后对该文件进行映射。能够相同达到匿名内存映射的效果。

    fd=open("/dev/zero",O_RDWR);
    if(fd==-1){
    	printf("open /dev/zero null
    ");
    	return -1;
    }
    addr=mmap(NULL,sizeof(int),PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);
    if(addr == NULL){
        printf("mmap error
    ");
        return -1;
    }
    


    3. shmget shmat shmctl

    shmget 是老式的system V 共享内存模式,非常多系统都支持这样的方法。

    int  id;
    //得到一个共享内存标识符或创建一个共享内存对象并返回共享内存标识符
    id = shmget(IPC_PRIVATE, shm->size, (SHM_R|SHM_W|IPC_CREAT));
    if(id==-1){
        perror("shmget:");
        return -1;
    }
    //连接共享内存标识符为shmid的共享内存,连接成功后把共享内存区对象映射到调用进程的地址空间。随后可像本地空间一样訪问
    addr = shmat(id, NULL, 0);
    if(addr == NULL){
        perror("shmat:");
        return -1;
    }
    //完毕对共享内存的控制
    if(shmctl(id, IPC_RMID, NULL)==-1){
        perror("shmctl:");
        return -1;
    }
    

  • 相关阅读:
    准备工作
    案例分析
    阅读任务
    准备工作
    案例分析作业
    情 202103226-1 编程作业
    阅读任务
    准备工作
    4 20210412-1 原型设计作业
    3 20210405-1 案例分析作业
  • 原文地址:https://www.cnblogs.com/llguanli/p/8594543.html
Copyright © 2011-2022 走看看