#libc #bindings #operating #operating-system #system #ffi

sys no-std anacrolix-libc

对平台库(如libc)的原始FFI绑定

1 个不稳定版本

使用旧的Rust 2015

0.2.151 2024年2月23日

#361 in 操作系统


用于 possum-db

MIT/Apache

4MB
103K SLoC

libc - 平台的系统库原始FFI绑定

GHA Status Cirrus CI Status Latest Version Documentation License

libc 提供了与Rust支持的所有平台上的C代码(或“类似C”代码)交互所需的所有定义。这包括类型定义(例如 c_int)、常量(例如 EINVAL)以及函数头(例如 malloc)。

此crate将所有底层平台类型、函数和常量导出在crate根目录下,因此所有项都可通过 libc::foo 访问。所有导出API的类型和值与libc编译的平台匹配。

有关此库设计的更详细信息,请参阅其 相关RFC

v0.3 路线图

主分支现在是v0.3,它有一些破坏性更改。

对于v0.2,请将PR提交到 libc-0.2 分支。一旦我们在crates.io上发布v0.3,我们将停止发布新的v0.2版本。

有关详细信息,请参阅 跟踪问题

用法

将以下内容添加到您的 Cargo.toml

[dependencies]
libc = "0.2"

特性

  • std:默认情况下,libc链接到标准库。禁用此特性可删除此依赖项,并在 #![no_std] crate中使用 libc

  • extra_traits:在 libc 中实现的全部 struct 都是 CopyClone。此特性推导出 DebugEqHashPartialEq

  • const-extern-fn:将一些 extern fn 函数转换为 const extern fn 函数。如果你使用 Rust >= 1.62,此功能默认启用。否则,需要使用 nightly rustc。

Rust 版本支持

目前最低支持的 Rust 工具链版本是 Rust 1.71.0(libc 目前没有关于最低支持 Rust 版本的政策;此类政策正在制定中)。

平台支持

你可以在 docs.rs 上看到平台(目标)特定的文档,选择你想要查看的平台。

请参阅 ci/build.sh 以获取 libc 在每个 Rust 工具链上保证可以构建的平台。GitHub Actions Cirrus CI 的测试矩阵显示了运行 libc 测试的平台。

许可协议

本项目许可协议为以下之一

任选其一。

贡献

我们欢迎所有想要贡献的人。请参阅 贡献说明 获取更多信息。

本项目以任何形式(问题、pull request 等)的贡献都必须遵守 Rust 的 行为准则

除非你明确表示,否则任何有意提交给 libc 的贡献(根据 Apache-2.0 许可协议定义),均应双重许可如上,不附加任何额外条款或条件。

依赖