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或http://www.apache.org/licenses/LICENSE-2.0)
- MIT许可(LICENSE-MIT或http://opensource.org/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