Mercurial > hg > toybox
annotate toys/pending/ipcrm.c @ 1639:856b544f8fce draft
strncpy(optptr, hname, strlen(hname)) is really just strcpy().
author | Rob Landley <rob@landley.net> |
---|---|
date | Thu, 01 Jan 2015 16:49:55 -0600 |
parents | be3133639b72 |
children |
rev | line source |
---|---|
1547
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
1 /* ipcrm.c - remove msg que, sem or shared memory |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
2 * |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
3 * Copyright 2014 Ashwini Kumar <ak.ashwini1981@gmail.com> |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
4 * |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
5 * See http://pubs.opengroup.org/onlinepubs/9699919799/utilities/ipcrm.html |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
6 |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
7 |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
8 USE_IPCRM(NEWTOY(ipcrm, "m*M*s*S*q*Q*", TOYFLAG_USR|TOYFLAG_BIN)) |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
9 |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
10 config IPCRM |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
11 bool "ipcrm" |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
12 default n |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
13 help |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
14 usage: ipcrm [ [-q msqid] [-m shmid] [-s semid] |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
15 [-Q msgkey] [-M shmkey] [-S semkey] ... ] |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
16 |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
17 -mM Remove memory segment after last detach |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
18 -qQ Remove message queue |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
19 -sS Remove semaphore |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
20 */ |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
21 |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
22 #define FOR_ipcrm |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
23 #include "toys.h" |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
24 #include <sys/ipc.h> |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
25 #include <sys/shm.h> |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
26 #include <sys/sem.h> |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
27 #include <sys/msg.h> |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
28 |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
29 GLOBALS( |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
30 struct arg_list *qkey; |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
31 struct arg_list *qid; |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
32 struct arg_list *skey; |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
33 struct arg_list *sid; |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
34 struct arg_list *mkey; |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
35 struct arg_list *mid; |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
36 ) |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
37 |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
38 static void do_ipcrm(int key, int ipc, char *name) |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
39 { |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
40 char *c; |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
41 int id, ret = 0; |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
42 |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
43 id = strtol(name, &c, 0); |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
44 if (*c) { |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
45 error_msg("invalid number :%s", name); |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
46 return; |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
47 } |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
48 |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
49 if (key) { |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
50 if (id == IPC_PRIVATE) { |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
51 error_msg("illegal key (%s)", name); |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
52 return; |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
53 } |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
54 id = ((ipc == 1)?shmget(id, 0, 0) : |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
55 (ipc == 2)? msgget(id, 0): semget(id, 0, 0)); |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
56 if (id < 0) { |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
57 perror_msg("key (%s)", name); |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
58 return; |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
59 } |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
60 } |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
61 |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
62 if (ipc == 1) ret = shmctl(id, IPC_RMID, NULL); |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
63 else if (ipc == 2) ret = msgctl(id, IPC_RMID, NULL); |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
64 else if (ipc == 3) ret = semctl(id, 0, IPC_RMID, NULL); |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
65 |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
66 if (ret < 0) perror_msg("%s (%s)", ((key)? "key": "id"), name); |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
67 } |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
68 |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
69 void ipcrm_main(void) |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
70 { |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
71 ++toys.argv; |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
72 if (toys.optc && (!strcmp(*toys.argv, "shm") || |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
73 !strcmp(*toys.argv, "sem") || !strcmp(*toys.argv, "msg"))) { |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
74 int t = (toys.argv[0][1] == 'h')? 1 : (toys.argv[0][1] == 's')? 2:3; |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
75 |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
76 while (*(++toys.argv)) do_ipcrm(0, t, *toys.argv); |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
77 } else { |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
78 struct arg_list *tmp; |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
79 |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
80 for (tmp = TT.mkey; tmp; tmp = tmp->next) do_ipcrm(1, 1, tmp->arg); |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
81 for (tmp = TT.mid; tmp; tmp = tmp->next) do_ipcrm(0, 1, tmp->arg); |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
82 for (tmp = TT.qkey; tmp; tmp = tmp->next) do_ipcrm(1, 2, tmp->arg); |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
83 for (tmp = TT.qid; tmp; tmp = tmp->next) do_ipcrm(0, 2, tmp->arg); |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
84 for (tmp = TT.skey; tmp; tmp = tmp->next) do_ipcrm(1, 3, tmp->arg); |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
85 for (tmp = TT.sid; tmp; tmp = tmp->next) do_ipcrm(0, 3, tmp->arg); |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
86 if (toys.optc) { |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
87 toys.exithelp++; |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
88 error_exit("unknown argument: %s", *toys.optargs); |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
89 } |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
90 } |
be3133639b72
ipcrm : remove msg que, sem or shared memory
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
91 } |