标签:
//共享内存 //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