首页 > 其他 > 详细

共享内存

时间:2016-05-13 03:57:47      阅读:139      评论: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
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!