2 个不稳定版本
0.3.0-alpha | 2023年5月15日 |
---|---|
0.2.0-alpha | 2022年11月15日 |
0.1.0-alpha2 |
|
在 macOS 和 iOS API 中排名 94
每月下载量 22 次
92KB
2K SLoC
mach_ports_rs
摘要
Mach 端口是 Darwin 中进程和内核之间大多数低级通信所使用的强大 IPC 机制。I/O Kit,与这些平台上的内核驱动程序通信的主要方式,以及 XPC,最广泛使用的用户空间 IPC 机制,都是使用 Mach 端口构建的。在这些系统上以安全的方式公开低级 API 需要 mach_ports_rs
库旨在提供的抽象。
Mach 端口名称包装器
Mach 端口在用户空间中由称为“名称”的句柄表示。与文件描述符不同,这些名称引用端口的一个或多个“权利”
MACH_PORT_RIGHT_SEND
:允许向 Mach 端口发送 Mach 消息。可以同时持有多个发送权利引用,允许存在多个发送者。MACH_PORT_RIGHT_RECEIVE
:允许从端口接收 Mach 消息并创建发送和发送一次权利。只能持有一个接收权利引用,这限制了接收者的数量为一个。MACH_PORT_RIGHT_SEND_ONCE
:允许向端口发送单个 Mach 消息。发送消息后,权利被销毁。可以同时存在多个发送权利,但每个权利只能有一个引用。MACH_PORT_RIGHT_PORT_SET
:允许在一次调用中从多个端口接收消息。目前mach_ports_rs
不支持端口集。MACH_PORT_RIGHT_DEAD_NAME
:在某些条件下(例如,当接收权利被销毁时,发送权利变为死名称权利),权利可以转换为死名称。这些也可以手动创建。
在发送和接收权限的情况下,例如,在相同进程中(IPC空间)使用相同的名称引用时,权限的引用计数是分别管理的。《code>mach_ports_rs通过提供针对Mach端口号的3个包装器来在类型级别上进行这种区分(不需要单独表示已死亡的名字)
SendRight
包装了一个持有发送权限引用的名字。这些可以通过增加发送权限的引用计数来克隆,并在释放时减少。RecvRight
包装了一个持有接收权限引用的名字。这些不能被克隆,并且在释放时通过减少其唯一的引用来销毁接收权限。SendOnceRight
包装了一个持有发送一次权限引用的名字。这些不能被克隆,并且在释放时通过减少其唯一的引用来销毁发送一次权限。
发送/接收Mach消息
Mach消息的格式相当复杂。所有Mach消息都以固定大小的头部开始,后面跟着可选的描述符、内联数据和只在接收消息中存在的尾部。
mach_ports_rs
提供了一些数据结构,可用于构建和解析此类消息。有关《code>msg模块的更多信息,请参阅文档。
许可证
根据您的要求,许可协议为
- Apache许可证版本2.0(《LICENSE-APACHE》或《https://apache.ac.cn/licenses/LICENSE-2.0》)
- MIT许可证(《LICENSE-MIT》或《http://opensource.org/licenses/MIT》)
任选其一。
贡献
除非您明确声明,否则您有意提交的任何贡献,包括但不限于Apache-2.0许可证中定义的工作,应按照上述方式进行双重许可,不附加任何额外条款或条件。
依赖关系
约95-305KB