Compare commits

..

No commits in common. "9aae14feae41de7df997d7e88e0f8370ad2e0cbe" and "12b117db7e7528d6289a2933279221efb1f3db6e" have entirely different histories.

5 changed files with 31 additions and 151 deletions

View file

@ -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 <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>`: Deadline until messages are received
(format: `%Y-%m-%d %H:%M:%S`)
- `-o,` `--timeout <timeout>`: As for example in "5h 23min 42ms"
### SysV IPC message queues
The SysV IPC backend supports no commands yet.

54
mqrs.1
View file

@ -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<QUEUE>\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<QUEUE>\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

View file

@ -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(())

View file

@ -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;

View file

@ -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<Local> = metadata.modified()?.into();
let accessed: DateTime<Local> = 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(())
}
}