shmtool w "text"
shmtool r
shmtool m (mode)
shmtool d
shmtool w test shmtool w "This is a test" shmtool r shmtool d shmtool m 660
#include <stdio.h> #include <sys/types.h> #include <sys/ipc.h> #include <sys/shm.h> #define SEGSIZE 100 main(int argc, char *argv[]) { key_t key; int shmid, cntr; char *segptr; if(argc == 1) usage(); /* ftok() È£ÃâÀ» °æÀ¯ÇÏ¿© À¯ÀÏÇÑ Å°°ªÀ» ¸¸µç´Ù */ key = ftok(".", 'S'); /* °øÀ¯ ¸Þ¸ð¸® ¼¼±×¸ÕÆ®¸¦ ¿¬´Ù - ÇÊ¿äÇÏ¸é ¸¸µç´Ù */ if((shmid = shmget(key, SEGSIZE, IPC_CREAT|IPC_EXCL|0666)) == -1) { printf("Shared memory segment exists - opening as client\n"); /* Segment probably already exists - try as a client */ 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(); } } writeshm(int shmid, char *segptr, char *text) { strcpy(segptr, text); printf("Done...\n"); } readshm(int shmid, char *segptr) { printf("segptr: %s\n", segptr); } removeshm(int shmid) { shmctl(shmid, IPC_RMID, 0); printf("Shared memory segment marked for deletion\n"); } changemode(int shmid, char *mode) { struct shmid_ds myshmds; /* ³»¹« ÀÚ·á ±¸Á¶Ã¼·ÎºÎÅÍ ÇöÀç °ªÀ» ¾ò´Â´Ù */ shmctl(shmid, IPC_STAT, &myshmds); /* °ú°ÅÀÇ Çã°¡»çÇ×À» Ç¥½ÃÇÑ´Ù */ printf("Old permissions were: %o\n", myshmds.shm_perm.mode); /* ¸ðµå¸¦ ¼öÁ¤ÇÏ°í ÀûÀçÇÑ´Ù */ sscanf(mode, "%o", &myshmds.shm_perm.mode); /* ¸ðµå¸¦ ¾÷µ¥ÀÌÆ®ÇÑ´Ù */ shmctl(shmid, IPC_SET, &myshmds); printf("New permissions are : %o\n", myshmds.shm_perm.mode); } usage() { fprintf(stderr, "shmtool - A utility for tinkering with shared memory\n"); fprintf(stderr, "\nUSAGE: shmtool (w)rite\n"); fprintf(stderr, " (r)ead\n"); fprintf(stderr, " (d)elete\n"); fprintf(stderr, " (m)ode change \n"); exit(1); }
Copyright (c) 1996,1997 by Euibeom.Hwang & SangEun.Oh All Rights Reserved
Email To:Webmaster ,
Another address
LAST UPDATE Nov 28,1997
Created Nov 28,1997