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;
    }
    

  • 相关阅读:
    怎样查看Oracle的数据库名称sid
    request.getRemoteAddr request.getRemoteHost()
    Oracle中添加自动编号的序列
    google chrome 快捷键
    MyEclipse快捷键大全( 再排版)
    Java正则表达式应用详解
    Spring3.1 Cache注解
    Java本周总结1.
    jquery ui 自动补全
    用字符串的length实现限制文本框长度
  • 原文地址:https://www.cnblogs.com/llguanli/p/8594543.html
Copyright © 2011-2022 走看看