11次重大发布

0.12.0 2024年7月30日
0.10.0 2024年7月14日
0.9.0 2023年2月21日

#318 in Unix API

Download history 16/week @ 2024-04-15 12/week @ 2024-04-22 4/week @ 2024-05-20 1/week @ 2024-06-03 5/week @ 2024-06-17 178/week @ 2024-07-08 97/week @ 2024-07-15 116/week @ 2024-07-22 202/week @ 2024-07-29

593 每月下载量
用于 3 crates

MIT 许可证

73KB
2K SLoC

Linux系统调用的低级、不安全的Rust接口。

raw 模块提供了一些函数,这些函数通过提供系统调用号和任意数量的参数来封装平台特定的汇编语言桩,以便进行任意的系统调用。

该crate目前支持以下架构

  • x86_64
  • x86 (32位)
  • arm
  • riscv64

对于这个初始版本,x86_64已经进行了一些有限的测试,其他平台几乎都没有测试。随着时间的推移,我打算支持Linux支持的、同时也支持Rust内联汇编的所有架构,但我们拭目以待。

crate根目录中的函数将使用薄包装器包装这些桩,这些包装器只需将它们的参数转换为内核期望的特定系统调用参数,然后委托给raw中的一个系统调用桩。

该crate还包括一些类型和类型别名,用于表示内核将解释的对象的内存布局。对于那些是别名的,调用代码必须始终使用别名而不是其底层类型,因为它们的确切定义可能在不同平台上以及在此crate的未来的版本中有所不同。

尽可能使包装函数和类型在架构之间可移植,只要调用者使用此crate中定义的参数类型和类型别名。原始系统调用接口在平台之间有相当大的重叠,但最终是特定于架构的,此crate不会在此层隐藏差异。

小心与 std 混合

Rust std crate有很多功能,它封装了目标系统的libc函数。在Linux系统中,libc是这个crate公开的系统调用接口的包装器,但也添加了其他状态和抽象,如缓冲区和错误代码。直接进行系统调用可能会违反libc所做出的假设。

为了避免奇怪的问题,请避免通过标准库和直接系统调用同时与同一系统资源进行交互。

依赖项

~42KB