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
每月下载量3,624次
64KB
564 行
posixmq
一个用于使用posix消息队列的Rust库。
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_06和mio_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 License,版本2.0,(LICENSE-APACHE或https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可(LICENSE-MIT或https://open-source.org.cn/licenses/MIT)
。
贡献
除非您明确说明,否则根据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()。 - 添加接收迭代器类型的
Iter和IntoIter。
版本 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