#message-queue #posix #queue #mq #mqueue

posixmq

一个用于使用posix消息队列的惯用库,可选的mio集成

4 个版本 (1 个稳定版本)

1.0.0 2021年2月2日
0.2.0 2019年7月8日
0.1.1 2019年4月5日
0.1.0 2019年3月25日

#261 in Unix API

Download history 1063/week @ 2024-03-13 893/week @ 2024-03-20 772/week @ 2024-03-27 969/week @ 2024-04-03 1156/week @ 2024-04-10 1417/week @ 2024-04-17 1093/week @ 2024-04-24 911/week @ 2024-05-01 732/week @ 2024-05-08 768/week @ 2024-05-15 691/week @ 2024-05-22 1084/week @ 2024-05-29 917/week @ 2024-06-05 719/week @ 2024-06-12 845/week @ 2024-06-19 928/week @ 2024-06-26

每月下载量3,624次

Apache-2.0 / MIT

64KB
564

posixmq

一个用于使用posix消息队列的Rust库。

crates.io Build Status License Documentation

let mq = posixmq::PosixMq::open("/queue").expect("cannot open /queue");
let mut buf = vec![0; mq.attributes().unwrap_or_default().max_msg_len];
loop {
    let (priority, len) = mq.recv(&mut buf).expect("recv() failed");
    let msg = std::str::from_utf8(&buf[..len]).expect("not UTF-8");
    println!("priority: {:3}, message: {}", priority, msg);
}

支持的操作系统

posixmq已在Linux、FreeBSD、NetBSD、DragonFly BSD和OmniOSce上进行了测试,以确保其正常工作,但并非所有功能都可在所有地方使用。有关详细信息,请参阅rustdoc。
*macOS、OpenBSD、Android和Windows没有posix消息队列,此crate在这些系统上无法编译。

可选的mio集成

在Linux、FreeBSD和DragonFly BSD上,posix消息队列可以与epoll / kqueue注册,因此可以使用mio。支持mio版本0.6和0.7,通过opt-in crate功能mio_06mio_07。例如,在Cargo.toml中启用您使用的mio版本的特性:

[dependencies]
mio = {version="0.7", features=["os-poll"]} # you probably need os-poll
posixmq = {version="1.0", features=["mio_07"]}

同时请记住以非阻塞模式打开消息队列。

最低支持的Rust版本

对于1.0.*版本,如果启用了mio_07特性,则最低Rust版本为1.39.0,否则为1.31.1。
后续的1.*.0版本可能会提高这一版本。在rustup为DragonFly和Illumos提供构建之前,最低版本不会超过这些操作系统的仓库中可用的版本。
新的可选功能可能需要更新的Rust版本。要锁定到次要版本,请在Cargo.toml中使用posixmq = "1.0.*",或者将posixmq.rs复制到您的项目中,并根据需要移除特性门。

许可

根据您的选择,许可协议为以下之一:

贡献

除非您明确说明,否则根据Apache-2.0许可中定义的,您有意提交以包含在本作品中的任何贡献,都将按照上述方式双许可,不附加任何其他条款或条件。

发布历史

版本 1.0.0(2021-02-02)

  • .attributes().is_nonblocking().is_cloexec() 返回错误。为了与 std 保持一致并便于捕获错误。
  • .receive() 重命名为 .recv(),以与 std 保持一致。(.receive_deadline().receive_timeout() 也被重命名为 .recv_deadline().recv_timeout())
  • unlink() 重命名为 remove_queue(),以与 std 保持一致。(unlink_c() 也被重命名为 remove_queue_c())
  • 为了未来的扩展性,使 Attributes 部分不可见,并为其实现 Default
  • 移除 name_from_bytes()
  • 将用于与 Mio 0.6 集成的 mio 功能重命名为 mio_06
  • 添加用于与 Mio 0.7 集成的 mio_07 功能。
  • 为借用迭代器 posixmq::Iter 实现 Clone
  • 避免为小于 47 字节的队列名称分配。
  • 在未知操作系统上禁用非标准功能。

版本 0.2.0(2019-07-08)

  • PosixMq::open() 从只读模式改为读写模式。
  • OpenOptions.permissions() 重命名为 .mode(),以与 std 保持一致。
  • 移除 OpenOptions.not_cloexec()
  • 添加 .send_timeout().send_deadline().receive_timeout().receive_deadline()
  • 添加接收迭代器类型的IterIntoIter

版本 0.1.1(2019-04-05)

  • 添加.try_clone()
  • 添加PosixMq::from_raw_mqd().as_raw_mqd().into_raw_mqd()
  • 在FreeBSD上实现Sync
  • 支持DragonFly BSD、NetBSD和Illumos。
  • 支持ARM目标平台和linux-x86_64-unknown-gnux32

版本 0.1.0(2019-03-25)

  • (初始发布)。
  • 支持Linux和FreeBSD。

依赖项

~0.4–510KB