📄 shmtool.c
字号:
#include <stdio.h>#include <sys/types.h>#include <sys/ipc.h>#include <sys/shm.h>#define SEGSIZE 100void writeshm(int shmid,char *segptr,char *text);void readshm(int shmid,char *segptr);void removeshm(int shmid);void changemode(int shmid,char *mode);void usage();int main(int argc,char *argv[]){ key_t key; int shmid,cntr; char *segptr; if (argc==1) usage(); key=ftok(".",'S'); if ((shmid=shmget(key,SEGSIZE,IPC_CREAT|IPC_EXCL|0666))==-1) { printf("Shared memory segment exisits-opening as client\n"); if ((shmid=shmget(key,SEGSIZE,0))==-1) { perror("shmget"); exit(1); } } else { printf("Creating new shared memory segment\n"); } if ((segptr=shmat(shmid,0,0))==-1) { perror("shmat"); exit(1); } 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 0;}void writeshm(int shmid,char *segptr,char *text){ strcpy(segptr,text); printf("Done...\n");}void readshm(int shmid,char *segptr){ printf("segptr:%s\n",segptr);}void removeshm(int shmid){ shmctl(shmid,IPC_RMID,0); printf("Shared memory segment marked for deletion\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,"shmtool-A utility for tinkering with shared memory\n"); fprintf(stderr,"\nUsage:shmtool (w)rite <text>\n"); fprintf(stderr," (r)ead\n"); fprintf(stderr," (d)elete\n"); fprintf(stderr," (m)ode <octal mode>\n");}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -