主题 : 进程间的通信——共享内存 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 18505
精华: 0
发帖: 48
金钱: 250 两
威望: 50 点
综合积分: 96 分
注册时间: 2010-04-10
最后登录: 2011-05-05
楼主  发表于: 2010-06-11 11:25

 进程间的通信——共享内存

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>

#define PERM S_IRUSR|S_IWUSR
/* 共享内存 */

int main(int argc,char **argv)
{
    int shmid;
    char *p_addr,*c_addr;
    
    if(argc!=2)
    {
        fprintf(stderr,"Usage:%s\n\a",argv[0]);
        exit(1);
    }

    /* 创建共享内存 */    
    if((shmid=shmget(IPC_PRIVATE,1024,PERM))==-1)
    {
        fprintf(stderr,"Create Share Memory Error:%s\n\a",strerror(errno));
        exit(1);
    }

    /* 创建子进程 */
    if(fork()) // 父进程写
    {
        p_addr=shmat(shmid,0,0);
        memset(p_addr,'\0',1024);
        strncpy(p_addr,argv[1],1024);
        wait(NULL); // 释放资源,不关心终止状态
        exit(0);
    }
    else       // 子进程读
    {
        sleep(1); // 暂停1秒        
        c_addr=shmat(shmid,0,0); //可见不同的进程映射的地址不同
        printf("Client get %s\n",c_addr);
        exit(0);
    }
}
共享内存非常方便,不需要read write访问  直接通过地址获得数据
学习交流