共享内存的使用

http://download1.csdn.net/down3/20070529/29183222619.Chttp://download1.csdn.net/down3/20070529/29183246962.Chttp://download1.csdn.net/down3/20070529/29183246962.Chttp://download1.csdn.net/down3/20070529/29183246962.C
源代是从人的文章中抄来的,不是原,不写得不,主要是描述两个不同的程从共享内存中存取数据的技,我加了点分析:

第一个是写数据:
/***** testwrite.c *******/

#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/types.h>
#include <unistd.h>
typedef struct{
        char name[4];
        int age;
} people;
main(int argc, char** argv)
{
        int shm_id,i;
        key_t key;
        char temp;
        people *p_map;
        char* name = "/dev/shm/myshm2";
        key = ftok(name,0);
        if(key==-1)
                perror("ftok error");
/*
先用ftokR建一个key,


pshmget R 建一 WW 共享内存区域 */
        shm_id=shmget(key,4096,IPC_CREAT);      
        if(shm_id==-1)
        {
                perror("shmget error");
                return;
        }
/*
将ル集 W 共享内存区附加到自己的内存段 */
        p_map=(people*)shmat(shm_id,NULL,0);
        temp='a';
        for(i = 0;i<10;i++)
        {
                temp+=1;
                memcpy((*(p_map+i)).name,&temp,1);
                (*(p_map+i)).age=20+i;
        }
/*
写数据完ユ k ,将其从自己的内存段中 “ R 出去 */
        if(shmdt(p_map)==-1)
                perror(" detach error ");
}
/*
读进 程首先要得到那 内存 候, ftok 根据文件名和 ID 建的 key
很用了,步 建是一 */
/********** testread.c ************/
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/types.h>
#include <unistd.h>
typedef struct{
        char name[4];
        int age;
} people;
main(int argc, char** argv)
{
        int shm_id,i;
        key_t key;
        people *p_map;
        char* name = "/dev/shm/myshm2";
        key = ftok(name,0);
        if(key == -1)
                perror("ftok error");
        shm_id = shmget(key,4096,IPC_CREAT);      
        if(shm_id == -1)
        {
                perror("shmget error");
                return;
        }
        p_map = (people*)shmat(shm_id,NULL,0);
        for(i = 0;i<10;i++)
        {
        printf( "name:%s/n",(*(p_map+i)).name );
        printf( "age %d/n",(*(p_map+i)).age );
        }
        if(shmdt(p_map) == -1)
                perror(" detach error ");
}


gcc -o testWriter  -g testWriter.C

gcc -o testRead  -g testRead.C

ipcs
察看 建的共享内存
注:事 上, ftok 函数 仅仅 是根据文件名和 ID 生成一个起 标识 作用的 key ,根据《 GNU Linux 程指南》 Linux 实现这 一函数 有点 问题 ,不推荐用。于是我一般来 都是自己定 一个唯一的 key ,而不使用 ftok 函数。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值