#bsd #unix #linux #macos

uapi

为类似 Unix 的平台上的操作系统 API 提供包装器

17 个版本

0.2.13 2024 年 3 月 12 日
0.2.10 2022 年 6 月 24 日
0.2.7 2022 年 2 月 15 日
0.2.4 2021 年 12 月 30 日
0.1.3 2020 年 5 月 30 日

#100 in Unix API

Download history 633/week @ 2024-04-03 602/week @ 2024-04-10 800/week @ 2024-04-17 872/week @ 2024-04-24 846/week @ 2024-05-01 671/week @ 2024-05-08 783/week @ 2024-05-15 630/week @ 2024-05-22 702/week @ 2024-05-29 699/week @ 2024-06-05 882/week @ 2024-06-12 987/week @ 2024-06-19 734/week @ 2024-06-26 535/week @ 2024-07-03 964/week @ 2024-07-10 790/week @ 2024-07-17

3,240 个月下载量
5 个 crate 中使用 (4 直接)

MIT/Apache

185KB
5K SLoC

Unix API

crates.io docs.rs

该 crate 包含围绕 Unix API 的安全包装器。

支持的目标

如果通过 CI 对该 crate 进行测试,则支持该目标。

以下目标得到支持

  • x86_64-unknown-linux-gnu (glibc >= 2.23)
  • x86_64-unknown-linux-musl (musl >= 1.1.19)
  • x86_64-unknown-freebsd (12)
  • x86_64-unknown-openbsd (6.7)
  • x86_64-apple-darwin (10.15)

此 crate 包含很少的架构特定代码。因此,其他架构(arm、aarch64 等)也可能工作。

未来更改

此 crate 完全支持将数据读取到未初始化的缓冲区中,但当相同的功能在 libstd 中稳定时,API 很可能发生变化。

与其他 crate 的比较

libc

此 crate 基于 libc crate,并在可能的情况下使用其原始 OS API 的声明。此 crate 认为自己是 libc 的下一步:它安全地包装原始 OS 函数,但做得很少。整数参数仍然是整数参数,在套接字上操作的功能接受套接字文件描述符作为原始整数,没有套接字包装器类型等。

同时,此 crate 提供了必要的工具,以便使其从 Rust 中使用起来与从 C 中使用原始 API 一样容易。例如,以下所有内容都只需按原样工作

open("./file", c::O_RDWR, 0);
open(b"./file", c::O_RDWR, 0);
open(CStr::from_ptr(p), c::O_RDWR, 0);
open(Path::new("./file"), c::O_RDWR, 0);

有关更多详细信息,请参阅 crate 文档。

nix

  • nix 使用嵌套模块结构。 uapi 在 crate 根目录中导出所有 API。
  • nix I/O 在 [u8] 上工作。 uapi I/O 在 [MaybeUninit<u8>] 上工作。
  • nix 使用枚举和位标志作为整数/标志参数。 uapi 使用纯整数。
  • nix 使用在包装器类型上声明的方法定义 API。 uapi 除非这样做不安全,否则使用自由函数。
  • nix 使用枚举来表示某些通用 OS API(例如控制消息)产生和消耗的值。 uapi 使用不限制可以使用类型的通用函数。

许可证

此项目根据您选择的以下许可证进行许可:

  • Apache 许可证第 2 版
  • MIT 许可证

任选其一。

依赖关系

~4–5.5MB
~106K SLoC