From 5fd83771641d15c418f747bd343ba6738d3875f7 Mon Sep 17 00:00:00 2001 From: Cameron Katri Date: Sun, 9 May 2021 14:20:58 -0400 Subject: Import macOS userland adv_cmds-176 basic_cmds-55 bootstrap_cmds-116.100.1 developer_cmds-66 diskdev_cmds-667.40.1 doc_cmds-53.60.1 file_cmds-321.40.3 mail_cmds-35 misc_cmds-34 network_cmds-606.40.1 patch_cmds-17 remote_cmds-63 shell_cmds-216.60.1 system_cmds-880.60.2 text_cmds-106 --- file_cmds/ipcrm/ipcrm.1 | 84 +++++++++++++++++++++++ file_cmds/ipcrm/ipcrm.c | 179 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 263 insertions(+) create mode 100644 file_cmds/ipcrm/ipcrm.1 create mode 100644 file_cmds/ipcrm/ipcrm.c (limited to 'file_cmds/ipcrm') diff --git a/file_cmds/ipcrm/ipcrm.1 b/file_cmds/ipcrm/ipcrm.1 new file mode 100644 index 0000000..55ff23c --- /dev/null +++ b/file_cmds/ipcrm/ipcrm.1 @@ -0,0 +1,84 @@ +.\" Copyright (c) 1994 Adam Glass +.\" All rights reserved. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. The name of the Author may not be used to endorse or promote products +.\" derived from this software without specific prior written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY Adam Glass ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL Adam Glass BE LIABLE +.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" +.\" $Id: ipcrm.1,v 1.3 2005/04/12 23:51:24 nicolai Exp $ +.\"" +.Dd August 8, 1994 +.Dt ipcrm 1 +.Os +.Sh NAME +.Nm ipcrm +.Nd remove the specified message queues, semaphore sets, and shared memory +segments +.Sh SYNOPSIS +.Nm ipcrm +.Op Fl M Ar shmkey +.Op Fl m Ar shmid +.Op Fl Q Ar msgkey +.Op Fl q Ar msqid +.Op Fl S Ar semkey +.Op Fl s Ar semid +.Ar ... +.Sh DESCRIPTION +.Nm Ipcrm +removes the specified message queues, semaphores and shared memory +segments. These System V IPC objects can be specified by their +creation id or any associated key. +.Pp +The following options are used to specify which IPC objects will be removed. +Any number and combination of these options can be used: +.Bl -tag -width indent +.It Fl M Ar shmkey +Mark the shared memory segment associated with key +.Nm shmkey +for removal. +This marked segment will be destroyed after the last detach. +.It Fl m Ar shmid +Mark the shared memory segment associated with id +.Nm shmid +for removal. +This marked segment will be destroyed after the last detach. +.It Fl Q Ar msgkey +Remove the message queue associated with key +.Nm msgkey +from the system. +.It Fl q Ar msqid +Remove the message queue associated with the id +.Nm msqid +from the system. +.It Fl S Ar semkey +Remove the semaphore set associated with key +.Nm semkey +from the system. +.It Fl s Ar semid +Removes the semaphore set associated with id +.Nm semid +from the system. +.El +.Pp +The identifiers and keys associated with these System V IPC objects can be +determined by using +.Xr ipcs 1 +. +.Sh SEE ALSO +.Xr ipcs 1 diff --git a/file_cmds/ipcrm/ipcrm.c b/file_cmds/ipcrm/ipcrm.c new file mode 100644 index 0000000..e90aaa1 --- /dev/null +++ b/file_cmds/ipcrm/ipcrm.c @@ -0,0 +1,179 @@ +/* + * Copyright (c) 1994 Adam Glass + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by Adam Glass. + * 4. The name of the Author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY Adam Glass ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL Adam Glass BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include +#ifndef lint +__used static const char rcsid[] = + "$Id: ipcrm.c,v 1.3 2005/02/03 07:31:33 josborne Exp $"; +#endif /* not lint */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define IPC_TO_STR(x) (x == 'Q' ? "msq" : (x == 'M' ? "shm" : "sem")) +#define IPC_TO_STRING(x) (x == 'Q' ? "message queue" : \ + (x == 'M' ? "shared memory segment" : "semaphore")) + +int signaled; + +static void usage(void) +{ + fprintf(stderr, "%s\n%s\n", + "usage: ipcrm [-q msqid] [-m shmid] [-s semid]", + " [-Q msgkey] [-M shmkey] [-S semkey] ..."); + exit(1); +} + +static int msgrm(key_t key, int id) +{ + if (key) { + id = msgget(key, 0); + if (id == -1) + return -1; + } + return msgctl(id, IPC_RMID, NULL); +} + +static int shmrm(key_t key, int id) +{ + if (key) { + id = shmget(key, 0, 0); + if (id == -1) + return -1; + } + return shmctl(id, IPC_RMID, NULL); +} + +static int semrm(key_t key, int id) +{ + if (key) { + id = semget(key, 0, 0); + if (id == -1) + return -1; + } + return semctl(id, 0, IPC_RMID); +} + +static void not_configured(__unused int unused) +{ + signaled++; +} + +int main(argc, argv) + int argc; + char *argv[]; + +{ + int c, result, errflg, target_id; + key_t target_key; + char *en; + + errflg = 0; + signal(SIGSYS, not_configured); + while ((c = getopt(argc, argv, ":q:m:s:Q:M:S:")) != -1) { + + signaled = 0; + switch (c) { + case 'q': + case 'm': + case 's': + target_id = (int)strtol(optarg, &en, 0); + if (*en) { + warnx("%s: '%s' is not a number", + IPC_TO_STRING(toupper(c)), optarg); + continue; + } + if (c == 'q') + result = msgrm(0, target_id); + else if (c == 'm') + result = shmrm(0, target_id); + else + result = semrm(0, target_id); + if (result < 0) { + errflg++; + if (!signaled) + warn("%sid(%d): ", IPC_TO_STR(toupper(c)), target_id); + else + warnx("%ss are not configured in the running kernel", + IPC_TO_STRING(toupper(c))); + } + break; + case 'Q': + case 'M': + case 'S': + target_key = (key_t)strtol(optarg, &en, 0); + if (*en) { + warnx("%s: '%s' is not a number", IPC_TO_STRING(c), optarg); + continue; + } + if (target_key == IPC_PRIVATE) { + warnx("can't remove private %ss", IPC_TO_STRING(c)); + continue; + } + if (c == 'Q') + result = msgrm(target_key, 0); + else if (c == 'M') + result = shmrm(target_key, 0); + else + result = semrm(target_key, 0); + if (result < 0) { + errflg++; + if (!signaled) + warn("%s key(%d): ", IPC_TO_STRING(c), target_key); + else + warnx("%ss are not configured in the running kernel", + IPC_TO_STRING(c)); + } + break; + case ':': + fprintf(stderr, "option -%c requires an argument\n", optopt); + usage(); + case '?': + fprintf(stderr, "unrecognized option: -%c\n", optopt); + usage(); + } + } + + if (optind != argc) { + fprintf(stderr, "unknown argument: %s\n", argv[optind]); + usage(); + } + exit(errflg); +} -- cgit v1.2.3-56-ge451