码迷,mamicode.com
首页 > 其他好文 > 详细

共享内存

时间:2016-05-13 04:00:28      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:

//共享内存
//shm.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <fcntl.h>
#include <sys/shm.h>

#define DEF_MAX_PATH ("./SHM")
#define DEF_STD_ERROR (-1)
#define DEF_SHM_SIZE (1024)

int main(int argc,char *argv[])
{
        key_t key;
        int shm_id;
        void *addr;
        struct shmid_ds shm_ds;
        //create file key
        key = ftok(DEF_MAX_PATH,atoi(argv[1]));
        if(key == DEF_STD_ERROR)
        {
                printf("%s\n",strerror(errno));
        }
        //printf("Sucess\n");
        //create / open shared memory
        shm_id = shmget(key, DEF_SHM_SIZE,IPC_CREAT);//reaturn id
        if(shm_id == DEF_STD_ERROR)
        {
                printf("%s\n",strerror(errno));
                return -1;
        }
        //map of shared memory
        addr = shmat(shm_id, NULL,0);
        if(addr == NULL)
        {
                printf("%s\n",strerror(errno));
                //delete shared memory
                shmctl(shm_id,IPC_RMID,NULL); //delete 
                return -1;
        }
        //write
        printf("Please input data:");
        scanf("%s",(char*)addr);
        //unmap
        shmdt(addr);//收回虚拟地址空间,解除映射
        //check shared mempry state
        printf("key = %d\n",key);
        shmctl(shm_id,IPC_STAT,&shm_ds);
        printf("size:[%d] , creator:[%d] , key:[%d]\n",shm_ds.shm_segsz,shm_ds.shm_perm.uid,shm_ds.shm_perm.__key);
        return 0;
}
//shm_reader.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <fcntl.h>
#include <sys/shm.h>

#define DEF_MAX_PATH ("./SHM")
#define DEF_STD_ERROR (-1)
#define DEF_SHM_SIZE (1024)




int main(int argc,char *argv[])
{
        key_t key;
        int shm_id;
        void *addr;
        struct shmid_ds shm_ds;
        //create file key
        key = ftok(DEF_MAX_PATH,atoi(argv[1]));
        if(key == DEF_STD_ERROR)
        {
                printf("%s\n",strerror(errno));
        }
        //create / open shared memory
        shm_id = shmget(key, DEF_SHM_SIZE,IPC_CREAT);//reaturn id
        if(shm_id == DEF_STD_ERROR)
        {
                printf("%s\n",strerror(errno));
                return -1;
        }
        //map of shared memory
        addr = shmat(shm_id, NULL,0);
        if(addr == NULL)
        {
                printf("%s\n",strerror(errno));
                //delete shared memory
                shmctl(shm_id,IPC_RMID,NULL); //delete 
                return -1;
        }
        //print
        printf("%s\n",(char*)addr);
        //unmap
        shmdt(addr);//收回虚拟地址空间,解除映射
        //get information
        shmctl(shm_id,IPC_STAT,&shm_ds);
        printf("size:[%d] , creator:[%d] , key:[%d]\n",shm_ds.shm_segsz,shm_ds.shm_perm.uid,shm_ds.shm_perm.__key);
        //delete
        shmctl(shm_id,IPC_RMID,NULL);
        return 0;
}

共享内存

标签:

原文地址:http://blog.csdn.net/ingnight/article/details/51336109

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!