3 个不稳定版本

0.2.1 2023年6月18日
0.2.0 2021年10月24日
0.1.0 2018年9月16日

#446Unix API

Download history 91/week @ 2024-03-30 13/week @ 2024-04-06 5/week @ 2024-04-13 23/week @ 2024-04-20 7/week @ 2024-04-27 16/week @ 2024-05-04 1/week @ 2024-05-11 6/week @ 2024-05-18 9/week @ 2024-05-25 8/week @ 2024-06-01 29/week @ 2024-06-08 15/week @ 2024-06-15 16/week @ 2024-06-22 5/week @ 2024-06-29 6/week @ 2024-07-06 32/week @ 2024-07-13

每月下载量 60

MIT 许可证

26KB
394

hinix

在 Rust 中提供高级 *nix 功能。

该库位于 Rust nix 包之上,为 *nix (Linux, Posix, Unix 等) 操作系统上的系统编程提供高级功能。

库的初始版本主要关注单主机上的进程间通信,包括事件对象、消息队列等各种通信和同步机制的对象。

v0.2.1 版本的新特性

  • Posix 消息队列 - MsgQueue
  • 消息队列实用应用程序,mqsendmqrecv

最低支持的 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