5 个版本
0.0.5 | 2022年2月15日 |
---|---|
0.0.4 | 2022年2月15日 |
0.0.3 | 2021年12月29日 |
0.0.2 | 2021年1月6日 |
0.0.1 | 2020年5月29日 |
#8 in #uapi
3,161 个月下载量
在 6 个 crate 中使用 (通过 uapi)
11KB
288 行
Unix API
此 crate 包含围绕 Unix API 的安全包装。
支持的目标
如果 crate 通过 CI 测试了该目标,则支持该目标。
以下目标是支持的
- 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 完全支持读取未初始化的缓冲区,但 API 可能会在 libstd 中提供相同功能时发生变化。
与其他 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 使用枚举来表示某些通用操作系统API(例如控制消息)产生的和消耗的值。 uapi 使用不限制可用类型的通用函数。
许可证
本项目受以下任一许可证的许可:
- Apache许可证,版本2.0
- MIT许可证
您可以选择使用。
依赖关系
~3.5–4.5MB
~89K SLoC