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

📄 shm_creat.cpp

📁 linux环境下 共享内存的简单使用
💻 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 + -