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. one you built.
## Using `mqrs` ## Using `mqrs`
Depending on which backend you want to use there are different subsets `mqrs` supports five commands: `create`, `info`, `unlink`, `send` and
of subcommands. Following backends are supported: `recv`. All commands do not have to be specified fully. If the
- `posix`: Uses POSIX message queues command is clearly distinguishable from all the others, it does not
- `sysv`: Uses SysV IPC message queues have to be completed further.
If a command is clearly distinguishable from all the others, ### Create a message queue
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
Use the `create` command to create a new POSIX message queue. Following Use the `create` command to create a new POSIX message queue. Following
optional arguments are supported: optional arguments are supported:
- `-c`, `--capacity`: Maximum number of messages in the queue - `-c`, `--capacity`: Maximum number of messages in the queue
- `-p`, `--permissions`: Permissions (octal) to create the queue with - `-p`, `--permissions`: Permissions (octal) to create the queue with
- `-s`, `--msgsize`: Message size in bytes - `-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 Use the `info` command to print further information about a message
queue. queue.
#### List all message queues ### Delete a message queue
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
Use the `unlink` command to 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 Use the `send` command to send a message to a message queue. Following
optional arguments are supported: optional arguments are supported:
- `-n`, `--non-blocking`: Do not block - `-n`, `--non-blocking`: Do not block
@ -87,7 +75,7 @@ optional arguments are supported:
default, priority >= 0 [default: 0] default, priority >= 0 [default: 0]
- `-o`, `--timeout <timeout>`: As for example in "5h 23min 42ms" - `-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 Use the `recv` command to receive one or more messages from a message
queue. Following optional arguments are supported: queue. Following optional arguments are supported:
- `-f`, `--follow`: Print messages as they are received - `-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 - `-d`, `--deadline <deadline>`: Deadline until messages are received
(format: `%Y-%m-%d %H:%M:%S`) (format: `%Y-%m-%d %H:%M:%S`)
- `-o,` `--timeout <timeout>`: As for example in "5h 23min 42ms" - `-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 .\" 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 .SH NAME
mqrs \- Handle POSIX message queues mqrs \- Handle POSIX message queues
.SH SYNOPSIS .SH SYNOPSIS
.B mqrs [\-h] [\-\-help] [\-v] [\-\-verbose] [\-V] [\-\-version] [SUBCOMMAND] .B mqrs [\-h] [\-\-help] [\-v] [\-\-verbose] [\-V] [\-\-version] [SUBCOMMAND]
.SH DESCRIPTION .SH DESCRIPTION
.B mqrs .B mqrs
is a small cli program to handle message queues. Depending on which is a small cli program to handle POSIX message queues. Supported commands are
backend you want to use there are different subsets of .B create\
subcommands. Following backends are supported: ,
.B posix\ .B info\
,
.B unlink\
,
.B send
and and
.B sysv\ .B recv
. .
All commands do not have to be specified fully. If the command is
If a command is clearly distinguishable from all the others, it does clearly distinguishable from all the others, it does not have to be
not have to be completed further. completed further.
.SH OPTIONS .SH OPTIONS
.TP 8 .TP 8
.B \-h, \-\-help .B \-h, \-\-help
@ -27,20 +31,7 @@ Produce verbose output, multiple -v options increase the verbosity
.TP 8 .TP 8
.B \-V, \-\-version .B \-V, \-\-version
Prints version information Prints version information
.SH POSIX MESSAGE QUEUE SUBCOMMANDS .SH SUBCOMMANDS
The POSIX backend supports six commands:
.B create\
,
.B info\
,
.B list\
,
.B unlink\
,
.B send
and
.B recv
.
.SS create [FLAGS] [OPTIONS] \fI<QUEUE>\fP .SS create [FLAGS] [OPTIONS] \fI<QUEUE>\fP
Create a new POSIX message queue. Create a new POSIX message queue.
.TP 8 .TP 8
@ -99,21 +90,6 @@ Prints help information
.B \-v, \-\-verbose .B \-v, \-\-verbose
Produce verbose output Produce verbose output
.RE .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 .SS recv [FLAGS] [OPTIONS] \fI<QUEUE>\fP
Receive and print one or more messages message from a message queue. Receive and print one or more messages message from a message queue.
.TP 8 .TP 8
@ -209,8 +185,6 @@ Prints help information
.B \-v, \-\-verbose .B \-v, \-\-verbose
Produce verbose output Produce verbose output
.RE .RE
.SH SYSV IPC MESSAGE QUEUE SUBCOMMANDS
The SysV IPC backend supports no commands yet.
.SH SEE ALSO .SH SEE ALSO
mq_overview(7) mq_overview(7)
.SH BUGS .SH BUGS

View file

@ -4,27 +4,14 @@ use clap::{crate_authors, crate_version, AppSettings, Clap};
mod posix; mod posix;
#[derive(Clap, Debug)] #[derive(Clap, Debug)]
enum Backend { enum Command {
/// Handle POSIX message queues
Posix(PosixCommand),
/// Handle SysV message queues
Sysv(SysvCommand),
}
#[derive(Clap, Debug)]
enum PosixCommand {
Create(posix::Create), Create(posix::Create),
Info(posix::Info), Info(posix::Info),
List(posix::List),
Unlink(posix::Unlink), Unlink(posix::Unlink),
Send(posix::Send), Send(posix::Send),
Recv(posix::Recv), Recv(posix::Recv),
} }
#[derive(Clap, Debug)]
enum SysvCommand {
}
#[derive(Clap, Debug)] #[derive(Clap, Debug)]
#[clap( #[clap(
version = crate_version!(), version = crate_version!(),
@ -37,9 +24,8 @@ struct Opts {
/// Produce verbose output, multiple -v options increase the verbosity (max. 3) /// Produce verbose output, multiple -v options increase the verbosity (max. 3)
#[clap(short, long, global = true, parse(from_occurrences))] #[clap(short, long, global = true, parse(from_occurrences))]
verbose: u32, verbose: u32,
/// Backend to be used
#[clap(subcommand)] #[clap(subcommand)]
backend: Backend, command: Command,
} }
fn main() -> Result<()> { fn main() -> Result<()> {
@ -55,17 +41,12 @@ fn main() -> Result<()> {
)) ))
.init(); .init();
match opts.backend { match opts.command {
Backend::Posix(p) => match p { Command::Create(c) => c.run()?,
PosixCommand::Create(c) => c.run()?, Command::Info(i) => i.run()?,
PosixCommand::Info(i) => i.run()?, Command::Unlink(u) => u.run()?,
PosixCommand::List(l) => l.run()?, Command::Send(s) => s.run()?,
PosixCommand::Unlink(u) => u.run()?, Command::Recv(r) => r.run()?,
PosixCommand::Send(s) => s.run()?,
PosixCommand::Recv(r) => r.run()?,
},
Backend::Sysv(s) => match s {
},
} }
Ok(()) Ok(())

View file

@ -1,13 +1,11 @@
mod create; mod create;
mod info; mod info;
mod list;
mod recv; mod recv;
mod send; mod send;
mod unlink; mod unlink;
pub use create::Create; pub use create::Create;
pub use info::Info; pub use info::Info;
pub use list::List;
pub use recv::Recv; pub use recv::Recv;
pub use send::Send; pub use send::Send;
pub use unlink::Unlink; 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(())
}
}