📄 shm_creat.cpp
字号:
#include <stdio.h>#include <unistd.h>#include <stdlib.h>#include <sys/types.h>#include <sys/ipc.h>#include <sys/shm.h>#include <string.h>#include <ctype.h>#define SHMSIZE 1024int open_shm(key_t key_val){ int shmid; if((shmid=shmget(key_val, SHMSIZE, IPC_CREAT|IPC_EXCL|0666))==-1) { printf("Shared memory segment exists. \n"); if((shmid=shmget(key_val, SHMSIZE, 0))==-1) { perror("shmget"); exit(1); } } else { printf("Creating new shared memory segment. \n"); } return shmid;}void writeshm(int shmid, void* segptr, char * text){ printf("write text length: %d \n", strlen(text)); strcpy((char*)segptr, text); strncpy((char*)segptr, text, strlen(text)); // memcpy(segptr, "bagbao", sizeof(text)); printf("Done...");}void readshm(int shmid, void* segptr){ printf("segptr:%s \n", (char*)segptr); }void removeshm(int shmid){ shmctl(shmid, IPC_RMID, 0); printf("Shared memory deleted \n");}void changemode(int shmid, char* mode){ struct shmid_ds myshm_ds; shmctl(shmid, IPC_STAT, &myshm_ds); printf("Old permissions were: %o \n", myshm_ds.shm_perm.mode); sscanf(mode,"%o", &myshm_ds.shm_perm.mode); shmctl(shmid, IPC_SET, &myshm_ds); printf("New permissions are : %o \n", myshm_ds.shm_perm.mode);}void usage(){ fprintf(stderr,"shmtoo -A utility for tinkering with shared memory \n"); fprintf(stderr,"shmtool (w)rite <text> \n"); fprintf(stderr,"shmtool (w)rite <text> \n"); fprintf(stderr,"shmtool (r)ead <text> \n"); fprintf(stderr,"shmtool (d)elete shm \n"); fprintf(stderr,"shmtool (m)ode change \n"); exit(1);}int main(int argc, char ** argv){ key_t key; int shmid; void* segptr; printf("argc =%d \n ", argc); if(argc==1) usage(); key=ftok(".", 'S'); if((shmid=open_shm(key))==-1) { perror("shmget"); exit(1); } printf("Creat shm ok \n"); if((segptr=shmat(shmid, 0, 0))==(void *)-1) { perror("shmat"); exit(1); } printf("shmat ok \n"); switch(tolower(argv[1][0])) { case 'w': writeshm(shmid, segptr, argv[2]); break; case 'r': readshm(shmid, segptr); break; case 'd': removeshm(shmid); break; case 'm': changemode(shmid, argv[2]); break; default: usage(); } return 1;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -