#uapi #macro #api #unix #linux #x86-64 #architecture

uapi-proc

uapi crate 的内部宏。请勿使用!

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

Download history 393/week @ 2024-03-27 631/week @ 2024-04-03 612/week @ 2024-04-10 763/week @ 2024-04-17 877/week @ 2024-04-24 874/week @ 2024-05-01 696/week @ 2024-05-08 807/week @ 2024-05-15 649/week @ 2024-05-22 715/week @ 2024-05-29 706/week @ 2024-06-05 849/week @ 2024-06-12 988/week @ 2024-06-19 737/week @ 2024-06-26 506/week @ 2024-07-03 763/week @ 2024-07-10

3,161 个月下载量
6 个 crate 中使用 (通过 uapi)

MIT/Apache

11KB
288

Unix API

crates.io docs.rs

此 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