Hi, According to the synopses in the help output and in the man page, it should be possible to use 'ipcs' with just the '-i' option and an ID. $ ./ipcs --help | grep '<id>' ipcs [resource] -i <id> -i, --id <id> print details on resource identified by id But when trying that, ipcs blurts out its entire help text. $ ./ipcs -i 111111 [...] In the help text it also says that '-a' is the default, but when adding '-a' to the above command, ipcs now produces three texts: $ ./ipcs -a -i 111111 Shared memory Segment shmid=111111 [...] Semaphore Array semid=111111 [...] ipcs: id 111111 not found (The latter error message could be clearer, mentioning that it refers to a message queue.) Whereas older ipcs would in this case just print an error message: $ /usr/bin/ipcs -a -i 111111 ipcs: shmctl failed: Invalid argument (Not good either, but at least it's shorter.) Attached first patch is an attempt to fix this. With the patch, ipcs now prints a clear errror message instead of outputting the entire help text: $ ./ipcs -a -i 111111 ipcs: when using an ID, a single resource must be specified The second patch improves the formatting and wording of the man page -- it also mentions that the -a option is not as in POSIX. Regards, Benno -- http://www.fastmail.fm - mmm... Fastmail...
From ae6bca4e8cb7d98d961b5288194aa3840ac43b73 Mon Sep 17 00:00:00 2001 From: Benno Schulenberg <bensberg@xxxxxxxxxxxxx> Date: Sun, 27 Jan 2013 13:09:51 +0100 Subject: [PATCH 1/2] ipcs: report an error when -i is used with multiple resources Also put everything in POSIX order: queues, memory, sempahores. Signed-off-by: Benno Schulenberg <bensberg@xxxxxxxxxxxxx> --- sys-utils/ipcs.c | 38 +++++++++++++++++++------------------- 1 files changed, 19 insertions(+), 19 deletions(-) diff --git a/sys-utils/ipcs.c b/sys-utils/ipcs.c index 1e1b022..352732a 100644 --- a/sys-utils/ipcs.c +++ b/sys-utils/ipcs.c @@ -77,13 +77,13 @@ static void __attribute__ ((__noreturn__)) usage(FILE * out) int main (int argc, char **argv) { - int opt, msg = 0, sem = 0, shm = 0, id=0, print=0; + int opt, msg = 0, shm = 0, sem = 0, id = 0, specific = 0; char format = NOTSPECIFIED; int unit = IPC_UNIT_DEFAULT; static const struct option longopts[] = { {"id", required_argument, NULL, 'i'}, - {"shmems", no_argument, NULL, 'm'}, {"queues", no_argument, NULL, 'q'}, + {"shmems", no_argument, NULL, 'm'}, {"semaphores", no_argument, NULL, 's'}, {"all", no_argument, NULL, 'a'}, {"time", no_argument, NULL, 't'}, @@ -97,7 +97,7 @@ int main (int argc, char **argv) {"help", no_argument, NULL, 'h'}, {NULL, 0, NULL, 0} }; - char options[] = "i:mqsatpclubVh"; + char options[] = "i:qmsatpclubVh"; setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, LOCALEDIR); @@ -108,7 +108,7 @@ int main (int argc, char **argv) switch (opt) { case 'i': id = atoi (optarg); - print = 1; + specific = 1; break; case 'a': msg = shm = sem = 1; @@ -116,12 +116,12 @@ int main (int argc, char **argv) case 'q': msg = 1; break; - case 's': - sem = 1; - break; case 'm': shm = 1; break; + case 's': + sem = 1; + break; case 't': format = TIME; break; @@ -153,20 +153,24 @@ int main (int argc, char **argv) } } - if (print) { + if (specific && (msg + shm + sem != 1)) + errx (EXIT_FAILURE, + _("when using an ID, a single resource must be specified")); + if (specific) { + if (msg) + print_msg (id, unit); if (shm) print_shm (id, unit); if (sem) print_sem (id); - if (msg) - print_msg (id, unit); - if (!shm && !sem && !msg ) - usage (stderr); } else { - if ( !shm && !msg && !sem) - msg = sem = shm = 1; + if (!msg && !shm && !sem) + msg = shm = sem = 1; printf ("\n"); - + if (msg) { + do_msg (format, unit); + printf ("\n"); + } if (shm) { do_shm (format, unit); printf ("\n"); @@ -175,10 +179,6 @@ int main (int argc, char **argv) do_sem (format); printf ("\n"); } - if (msg) { - do_msg (format, unit); - printf ("\n"); - } } return EXIT_SUCCESS; } -- 1.7.0.4
From 5a7e5260e6f74a2384533c50d94b76bd38e63dbd Mon Sep 17 00:00:00 2001 From: Benno Schulenberg <bensberg@xxxxxxxxxxxxx> Date: Sun, 27 Jan 2013 14:40:19 +0100 Subject: [PATCH 2/2] docs: improve wording, formatting and accuracy of ipcs man page Signed-off-by: Benno Schulenberg <bensberg@xxxxxxxxxxxxx> --- sys-utils/ipcs.1 | 72 ++++++++++++++++++++++++++++++------------------------ 1 files changed, 40 insertions(+), 32 deletions(-) diff --git a/sys-utils/ipcs.1 b/sys-utils/ipcs.1 index 5fc3a81..fd7d452 100644 --- a/sys-utils/ipcs.1 +++ b/sys-utils/ipcs.1 @@ -1,76 +1,82 @@ .\" Copyright 1993 Rickard E. Faith (faith@xxxxxxxxxx) .\" May be distributed under the GNU General Public License -.TH IPCS "1" "September 2011" "util-linux" "User Commands" +.TH IPCS "1" "January 2013" "util-linux" "User Commands" .SH NAME -ipcs \- provide information on ipc facilities +ipcs \- provide information on IPC facilities .SH SYNOPSIS .B ipcs -[resource] [...] [output\-format] +.RB [ resource\-option "] [" output\-format ] .br .B ipcs -[resource] -.I \-i id +.RB [ resource\-option ] +.BI \-i " id" .SH DESCRIPTION .B ipcs -provides information on the ipc facilities for which the calling process -has read access. +provides information on the inter-process communication facilities +for which the calling process has read access. .SH OPTIONS .TP \fB\-i\fR, \fB\-\-id\fR \fIid\fR -Print details only on resource identified by +Print details only on the resource identified by .IR id . .TP \fB\-h\fR, \fB\-\-help\fR -Display this help and exit. +Display a help text and exit. .TP \fB\-V\fR, \fB\-\-version\fR -Output version information and exit. +Display version information and exit. .SH "RESOURCE OPTIONS" .TP -\fB\-m\fR, \fB\-\-shmems\fR -Write information about active shared memory segments. -.TP \fB\-q\fR, \fB\-\-queues\fR Write information about active message queues. .TP +\fB\-m\fR, \fB\-\-shmems\fR +Write information about active shared memory segments. +.TP \fB\-s\fR, \fB\-\-semaphores\fR Write information about active semaphore sets. .TP \fB\-a\fR, \fB\-\-all\fR -Write information about all resources (default). +Write information about all three resources (default). .SH "OUTPUT FORMATS" +Of the options +.BR \-c , +.BR \-l , +.BR \-p , +.BR \-t " and " \-u +only one (the last one specified) takes effect. +.TP +\fB\-c\fR, \fB\-\-creator\fR +Show creator and owner. +.TP +\fB\-l\fR, \fB\-\-limits\fR +Show resource limits. +.TP +\fB\-p\fR, \fB\-\-pid\fR +Show PIDs of creator and last operator. .TP \fB\-t\fR, \fB\-\-time\fR -Write time information. Time of the last control operation that changed the -access permissions for all facilities, time of the last +Write time information. The time of the last control operation that changed +the access permissions for all facilities, the time of the last .I msgsnd() and .I msgrcv() -operations on message queues, time of the last +operations on message queues, the time of the last .I shmat() and .I shmdt() -operations on shared memory, and time of the last +operations on shared memory, and the time of the last .I semop() operation on semaphores. .TP -\fB\-p\fR, \fB\-\-pid\fR -Show creator and last operations PIDs. -.TP -\fB\-c\fR, \fB\-\-creator\fR -Show creator and owner. -.TP -\fB\-l\fR, \fB\-\-limits\fR -Show resource limits. -.TP \fB\-u\fR, \fB\-\-summary\fR Show status summary. .TP -.B \-\-human -Print sizes in human readable format. -.TP \fB\-b\fR, \fB\-\-bytes\fR Print sizes in bytes. +.TP +.B \-\-human +Print sizes in human-readable format. .SH SEE ALSO .BR ipcrm (1), .BR ipcmk (1), @@ -83,7 +89,8 @@ Print sizes in bytes. .BR shmget (2) .SH CONFORMING TO The Linux ipcs utility is not fully compatible to the POSIX ipcs utility. -The Linux version does not support the +The Linux version does not support the POSIX +.BR \-a , .B \-b and .B \-o @@ -91,7 +98,8 @@ options, but does support the .B \-l and .B \-u -options not defined by POSIX. The portable application shall not use the +options not defined by POSIX. A portable application shall not use the +.BR \-a , .BR \-b , .BR \-o , .BR \-l , -- 1.7.0.4