3 个不稳定版本
0.2.1 | 2023年6月18日 |
---|---|
0.2.0 | 2021年10月24日 |
0.1.0 | 2018年9月16日 |
#446 在 Unix API 中
每月下载量 60
26KB
394 行
hinix
在 Rust 中提供高级 *nix 功能。
该库位于 Rust nix 包之上,为 *nix (Linux, Posix, Unix 等) 操作系统上的系统编程提供高级功能。
库的初始版本主要关注单主机上的进程间通信,包括事件对象、消息队列等各种通信和同步机制的对象。
v0.2.1 版本的新特性
- Posix 消息队列 -
MsgQueue
- 消息队列实用应用程序,
mqsend
和mqrecv
最低支持的 Rust 版本
最低支持的 Rust 版本是 Rust 版本 2021,v1.63.0
进程间通信
在 *nix 系统上,有多个对象可以封装进程间通信机制。这些主要是内核中的高性能通信和同步子系统,用于在不同程序之间传递数据和信号。
Posix 消息队列: MsgQueue
一个高效、优先级的消息系统,适用于多个生产者和消费者。
一个进程可以在目录路径名空间中创建一个命名队列,通过常规文件权限来管理访问。每个队列都创建了一个最大消息数和每个消息的最大大小。单个消息可以是可变大小,系统会正确地分隔每个消息。可以查询队列的大小和可用消息数等,所有I/O操作都可以是非阻塞的。
请参阅 mq_overview 手册页。
所有这些都可以通过 MsqQueue
结构体来访问。用法如下
let mq = MsgQueue::create("/myque", 4, 512)?;
mq.send(b"Hello, world!")?;
这创建了一个名为 "/myque" 的队列,有 4 个槽位,可以包含最多 512 字节的消息,然后将字节 "Hello, world!" 作为消息写入队列。
请注意,在 Linux 中,队列名称必须以正斜杠开头,并且不得包含任何其他斜杠。
事件通知: EventFd
一种基于文件系统的事件通知系统。这是一个等待和通知系统,可以在用户空间应用程序之间发送事件,基于64位整数计数器。根据创建对象时使用的标志,它可以用来在应用程序之间传递值,或者可以像信号量一样工作,写入时增加值,读取时减少值,当值为零时,读取者将被阻塞。
请参阅eventfd手册页。
事件通知系统的一个有用之处在于,它基于文件描述符,因此可以插入使用select/poll/epoll语义的I/O轮询循环中,以提供额外的信号,例如何时退出或暂停,或执行其他操作。
let evt = EventFd::new(0)?;
evt.write(42)?;
依赖关系
~1.5MB
~36K SLoC