⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 shmtool.c

📁 操作系统Interprocess Communication(IPC)实验源码。 在Unix的内核环境中
💻 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 + -