/********************************************************************** * Copyright (c) Digital Equipment Corporation 1984, 1985, 1986. * * All Rights Reserved. * * Reference "/usr/src/COPYRIGHT" for applicable restrictions. * **********************************************************************/ static char Sccsid[] = "@(#)ipcrm.c 3.0 4/21/86"; /* ** ipcrm - IPC remove ** Remove specified message queues, semaphore sets and shared memory ids. */ #include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h> #include <sys/sem.h> /*#ifndef pdp11 #include <sys/shm.h> #endif */ #include <sys/errno.h> #include <stdio.h> char opts[] = "q:s:Q:S:"; /* allowable options for getopt */ extern char *optarg; /* arg pointer for getopt */ extern int optind; /* option index for getopt */ extern int errno; /* error return */ main(argc, argv) int argc; /* arg count */ char **argv; /* arg vector */ { register int o; /* option flag */ register int err; /* error count */ register int ipc_id; /* id to remove */ register key_t ipc_key;/* key to remove */ extern long atol(); /* Go through the options */ err = 0; while ((o = getopt(argc, argv, opts)) != EOF) switch(o) { case 'q': /* message queue */ ipc_id = atoi(optarg); if (msgctl(ipc_id, IPC_RMID, 0) == -1) oops("msqid", (long)ipc_id); break; /* pdp11 does not have shared memory */ /* case 'm': */ /* shared memory */ /* #ifdef pdp11 fprintf(stderr,"shared memory not implemented on pdp11\n"); #else ipc_id = atoi(optarg); if (shmctl(ipc_id, IPC_RMID, 0) == -1) oops("shmid", (long)ipc_id); #endif break; */ case 's': /* semaphores */ ipc_id = atoi(optarg); if (semctl(ipc_id, IPC_RMID, 0) == -1) oops("semid", (long)ipc_id); break; case 'Q': /* message queue (by key) */ ipc_key = (key_t)atol(optarg); if ((ipc_id=msgget(ipc_key, 0)) == -1 || msgctl(ipc_id, IPC_RMID, 0) == -1) oops("msgkey", ipc_key); break; /* pdp11 does not have shared memory */ /* case 'M': */ /* shared memory (by key) */ /* #ifdef pdp11 fprintf(stderr,"shared memory not implemented on pdp11\n"); #else ipc_key = (key_t)atol(optarg); if ((ipc_id=shmget(ipc_key, 0, 0)) == -1 || shmctl(ipc_id, IPC_RMID, 0) == -1) oops("shmkey", ipc_key); #endif break; */ case 'S': /* semaphores (by key) */ ipc_key = (key_t)atol(optarg); if ((ipc_id=semget(ipc_key, 0, 0)) == -1 || semctl(ipc_id, IPC_RMID, 0) == -1) oops("semkey", ipc_key); break; default: case '?': /* anything else */ err++; break; } if (err || (optind < argc)) { fprintf(stderr, "usage: ipcrm [ [-q msqid] [-s semid]\n%s\n", " [-Q msgkey] [-S semkey] ... ]"); exit(1); } } oops(s, i) char *s; long i; { char *e; switch (errno) { case ENOENT: /* key not found */ case EINVAL: /* id not found */ e = "not found"; break; case EPERM: /* permission denied */ e = "permission denied"; break; default: e = "unknown error"; } fprintf(stderr, "ipcrm: %s(%ld): %s\n", s, i, e); }