39次发布

0.6.18 2024年3月16日
0.6.15 2023年10月11日
0.6.13 2023年6月20日
0.6.9 2023年3月23日
0.1.4 2019年10月1日

#29 in Unix API

Download history 1218/week @ 2024-04-07 2118/week @ 2024-04-14 1220/week @ 2024-04-21 1354/week @ 2024-04-28 923/week @ 2024-05-05 951/week @ 2024-05-12 1855/week @ 2024-05-19 2250/week @ 2024-05-26 918/week @ 2024-06-02 893/week @ 2024-06-09 600/week @ 2024-06-16 1360/week @ 2024-06-23 769/week @ 2024-06-30 1394/week @ 2024-07-07 1264/week @ 2024-07-14 1156/week @ 2024-07-21

4,642 个月下载
5 个crate 中使用

BSD-2-Clause

1MB
9K SLoC

syscalls

Crates.io docs.rs License

这是一个用于列出和调用原始Linux系统调用的低级库。

功能

  • 为多个架构提供系统调用枚举(见下表)。
  • 为多个架构提供可内联的系统调用函数(见下表)。
  • 为Rustic错误处理提供Errno类型。
  • 提供O(1)数组支持的SysnoSetSysnoMap类型。

功能标志

默认启用的功能包括stdserde

std

默认情况下,启用了std支持。如果您想在no_std环境中编译,请使用

syscalls = { version = "0.6", default-features = false }

serde

可以使用Serde将各种类型序列化。这可以通过以下方式启用

syscalls = { version = "0.6", features = ["serde"] }

full

启用所有额外功能。

all

启用所有架构的系统调用表。如果您不需要所有架构,您可以通过如armx86powerpc等特性单独启用它们。请参阅下方的架构支持表以获取可用架构的完整列表。

架构支持

《枚举》列表示为该架构实现了Sysno枚举。

《调用》列表示可以为该架构调用系统调用。

《稳定Rust?》列表示系统调用调用只需要稳定Rust。一些架构需要nightly Rust,因为内联汇编尚未针对所有架构稳定

Arch Enum Invoke Stable Rust?
arm* 是 ✅
aarch64 是 ✅
mips 无 ❌
mips64 无 ❌
powerpc 无 ❌
powerpc64 无 ❌
riscv32 ❌† 无 ❌
riscv64 是 ✅
s390x 无 ❌
sparc 不适用
sparc64 不适用
x86 是 ✅
x86_64 是 ✅

包含ARM thumb模式支持。

† Rust不支持riscv32 Linux目标,但如果您想冒险,则已实现syscall函数。

更新syscall列表

更新来自Linux源树中的.tbl文件。

  1. syscalls-gen/src/main.rs中的Linux版本更改为最新版本。仅更新到最新稳定版本(不是候选版本)。
  2. 运行cd syscalls-gen && cargo run。这将再生src/arch/中的syscall表。

依赖项

~0.4–1MB
~22K SLoC