Webserver(2.7)内存映射-匿名映射

时间:2024-10-31 19:48:09

不需要文件实体进行内存映射
之前的都是文件映射,通过文件,共享文件

#include<stdio.h>
#include<sys/mman.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>
#include<stdlib.h>
#include<string.h>
#include<wait.h>


int main(){

    //1.创建匿名内存映射区
    int len=4096;
    void * ptr=mmap(NULL,len,PROT_READ | PROT_WRITE,MAP_SHARED | MAP_ANONYMOUS,-1,0);
    if(ptr==MAP_FAILED){
        perror("mmap");
        exit(0);
    }

    //父子进程通信
    pid_t pid=fork();

    if(pid>0){
        //父进程
        strcpy((char *)ptr,"hello,world");
        wait(NULL);
    }else if(pid==0){
        //子进程
        sleep(1);
        printf("%s\n",(char *)ptr);
    }

    //释放内存映射区
    int ret=munmap(ptr,len);

    if(ret==-1){
        perror("munmap");
        exit(0);
    }


    return 0;
}

实现父子进程通信
在这里插入图片描述