Compare commits
No commits in common. "9aae14feae41de7df997d7e88e0f8370ad2e0cbe" and "12b117db7e7528d6289a2933279221efb1f3db6e" have entirely different histories.
9aae14feae
...
12b117db7e
5 changed files with 31 additions and 151 deletions
33
README.md
33
README.md
|
@ -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
54
mqrs.1
|
@ -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
|
||||||
|
|
35
src/main.rs
35
src/main.rs
|
@ -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(())
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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(())
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in a new issue