diff --git a/README.md b/README.md index d274168..ebc9031 100644 --- a/README.md +++ b/README.md @@ -46,38 +46,26 @@ from `target/{debug,release}/mqrs` depending on which one you built. ## Using `mqrs` -Depending on which backend you want to use there are different subsets -of subcommands. Following backends are supported: -- `posix`: Uses POSIX message queues -- `sysv`: Uses SysV IPC message queues +`mqrs` supports five commands: `create`, `info`, `unlink`, `send` and +`recv`. All commands do not have to be specified fully. If the +command is clearly distinguishable from all the others, it does not +have to be completed further. -If a command is clearly distinguishable from all the others, -it does not have to be completed further. - -### POSIX message queues -The POSIX backend supports six commands: `create`, `info`, `list`, -`unlink`, `send` and `recv`. - -#### Create a message queue +### Create a message queue Use the `create` command to create a new POSIX message queue. Following optional arguments are supported: - `-c`, `--capacity`: Maximum number of messages in the queue - `-p`, `--permissions`: Permissions (octal) to create the queue with - `-s`, `--msgsize`: Message size in bytes -#### Print information about a message queue +### Print information about a message queue Use the `info` command to print further information about a message queue. -#### List all message queues -Use the `list` command to print a list of all message -queues. Following option argument is supported: -- `-a`, `--all`: Print all available information - -#### Delete a message queue +### Delete a message queue Use the `unlink` command to delete a message queue. -#### Send a message to a queue +### Send a message to a queue Use the `send` command to send a message to a message queue. Following optional arguments are supported: - `-n`, `--non-blocking`: Do not block @@ -87,7 +75,7 @@ optional arguments are supported: default, priority >= 0 [default: 0] - `-o`, `--timeout `: As for example in "5h 23min 42ms" -#### Receive a message from a queue +### Receive a message from a queue Use the `recv` command to receive one or more messages from a message queue. Following optional arguments are supported: - `-f`, `--follow`: Print messages as they are received @@ -96,6 +84,3 @@ queue. Following optional arguments are supported: - `-d`, `--deadline `: Deadline until messages are received (format: `%Y-%m-%d %H:%M:%S`) - `-o,` `--timeout `: As for example in "5h 23min 42ms" - -### SysV IPC message queues -The SysV IPC backend supports no commands yet. diff --git a/mqrs.1 b/mqrs.1 index 9934081..50fa2d0 100644 --- a/mqrs.1 +++ b/mqrs.1 @@ -1,21 +1,25 @@ .\" Manpage for mqrs -.TH man 1 "7 July 2021" "0.1.1" "mqrs man page" +.TH man 1 "27 June 2021" "0.1.1" "mqrs man page" .SH NAME mqrs \- Handle POSIX message queues .SH SYNOPSIS .B mqrs [\-h] [\-\-help] [\-v] [\-\-verbose] [\-V] [\-\-version] [SUBCOMMAND] .SH DESCRIPTION .B mqrs -is a small cli program to handle message queues. Depending on which -backend you want to use there are different subsets of -subcommands. Following backends are supported: -.B posix\ +is a small cli program to handle POSIX message queues. Supported commands are +.B create\ +, +.B info\ +, +.B unlink\ +, +.B send and -.B sysv\ +.B recv . - -If a command is clearly distinguishable from all the others, it does -not have to be completed further. +All commands do not have to be specified fully. If the command is +clearly distinguishable from all the others, it does not have to be +completed further. .SH OPTIONS .TP 8 .B \-h, \-\-help @@ -27,20 +31,7 @@ Produce verbose output, multiple -v options increase the verbosity .TP 8 .B \-V, \-\-version Prints version information -.SH POSIX MESSAGE QUEUE SUBCOMMANDS -The POSIX backend supports six commands: -.B create\ -, -.B info\ -, -.B list\ -, -.B unlink\ -, -.B send -and -.B recv -. +.SH SUBCOMMANDS .SS create [FLAGS] [OPTIONS] \fI\fP Create a new POSIX message queue. .TP 8 @@ -99,21 +90,6 @@ Prints help information .B \-v, \-\-verbose Produce verbose output .RE -.SS list [FLAGS] -Print a list of all existing POSIX message queues. -.TP 8 -.SS FLAGS -.RS -.TP 8 -.B \-h, \-\-help -Prints help information -.TP 8 -.B \-v, \-\-verbose -Produce verbose output -.TP 8 -.B \-a, \-\-all -Print all available information -.RE .SS recv [FLAGS] [OPTIONS] \fI\fP Receive and print one or more messages message from a message queue. .TP 8 @@ -209,8 +185,6 @@ Prints help information .B \-v, \-\-verbose Produce verbose output .RE -.SH SYSV IPC MESSAGE QUEUE SUBCOMMANDS -The SysV IPC backend supports no commands yet. .SH SEE ALSO mq_overview(7) .SH BUGS diff --git a/src/main.rs b/src/main.rs index cc1d185..40296fb 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,27 +4,14 @@ use clap::{crate_authors, crate_version, AppSettings, Clap}; mod posix; #[derive(Clap, Debug)] -enum Backend { - /// Handle POSIX message queues - Posix(PosixCommand), - /// Handle SysV message queues - Sysv(SysvCommand), -} - -#[derive(Clap, Debug)] -enum PosixCommand { +enum Command { Create(posix::Create), Info(posix::Info), - List(posix::List), Unlink(posix::Unlink), Send(posix::Send), Recv(posix::Recv), } -#[derive(Clap, Debug)] -enum SysvCommand { -} - #[derive(Clap, Debug)] #[clap( version = crate_version!(), @@ -37,9 +24,8 @@ struct Opts { /// Produce verbose output, multiple -v options increase the verbosity (max. 3) #[clap(short, long, global = true, parse(from_occurrences))] verbose: u32, - /// Backend to be used #[clap(subcommand)] - backend: Backend, + command: Command, } fn main() -> Result<()> { @@ -55,17 +41,12 @@ fn main() -> Result<()> { )) .init(); - match opts.backend { - Backend::Posix(p) => match p { - PosixCommand::Create(c) => c.run()?, - PosixCommand::Info(i) => i.run()?, - PosixCommand::List(l) => l.run()?, - PosixCommand::Unlink(u) => u.run()?, - PosixCommand::Send(s) => s.run()?, - PosixCommand::Recv(r) => r.run()?, - }, - Backend::Sysv(s) => match s { - }, + match opts.command { + Command::Create(c) => c.run()?, + Command::Info(i) => i.run()?, + Command::Unlink(u) => u.run()?, + Command::Send(s) => s.run()?, + Command::Recv(r) => r.run()?, } Ok(()) diff --git a/src/posix.rs b/src/posix.rs index c5855c8..d9e6266 100644 --- a/src/posix.rs +++ b/src/posix.rs @@ -1,13 +1,11 @@ mod create; mod info; -mod list; mod recv; mod send; mod unlink; pub use create::Create; pub use info::Info; -pub use list::List; pub use recv::Recv; pub use send::Send; pub use unlink::Unlink; diff --git a/src/posix/list.rs b/src/posix/list.rs deleted file mode 100644 index 54c031a..0000000 --- a/src/posix/list.rs +++ /dev/null @@ -1,58 +0,0 @@ -use anyhow::{anyhow, Result}; -use chrono::{DateTime, Local}; -use clap::Clap; -use log::warn; -use std::{fs, os::unix::fs::PermissionsExt}; - -/// Print information about an existing message queue -#[derive(Clap, Debug)] -pub struct List { - /// Show all parameters - #[clap(short, long)] - all: bool, -} - -impl List { - pub fn run(&self) -> Result<()> { - match self.all { - false => println!("Name"), - true => println!( - "{0: <10} {1: <10} {2: <12} {3: <26} {4: <26}", - "Name", "Size", "Permissions", "Modified", "Accessed", - ), - } - - for mq in fs::read_dir("/dev/mqueue")? { - match mq { - Ok(mq) => { - print!( - "/{0: <10}", - mq.file_name().into_string().map_err(|e| anyhow!( - "Could not convert queue name to string: {:?}", - e - ))? - ); - - if self.all { - let metadata = mq.metadata()?; - let modified: DateTime = metadata.modified()?.into(); - let accessed: DateTime = metadata.accessed()?.into(); - - print!( - "{0: <10} {1: <12o} {2: <26} {3: <26}", - metadata.len(), - metadata.permissions().mode(), - modified, - accessed, - ); - } - - println!(); - } - Err(e) => warn!("Could not read file: {:?}", e), - } - } - - Ok(()) - } -}