#libc #abi #linux #rustix

nightly no-std c-gull

Rust中的libc实现

73个发布版本

新版本 0.17.0 2024年8月22日
0.16.1 2024年5月22日
0.15.44 2024年4月22日
0.15.41 2024年2月29日
0.6.1 2022年11月8日

#142 in Unix APIs

Download history 41/week @ 2024-05-03 24/week @ 2024-05-10 431/week @ 2024-05-17 40/week @ 2024-05-24 27/week @ 2024-05-31 25/week @ 2024-06-07 13/week @ 2024-06-14 13/week @ 2024-06-21 37/week @ 2024-06-28 16/week @ 2024-07-05 11/week @ 2024-07-12 5/week @ 2024-07-19 485/week @ 2024-07-26 84/week @ 2024-08-02 18/week @ 2024-08-09 116/week @ 2024-08-16

703 每月下载量
用于 5 个crate (2 个直接使用)

Apache-2.0…

640KB
18K SLoC

c-gull

Rust中的libc实现

Github Actions CI Status zulip chat crates.io page docs.rs docs

c-gull 是一个libc实现。它是libc crate中描述的ABI的实现。

它使用Rust编写的crate实现,例如 c-scaperustixoriginlibmrealpath-exttz-rsprintf-compatnum-complexposix-regex

目前它仅支持 *-*-linux-gnu ABIs,尽管将来可以添加其他ABIs。目前主要关注Rust程序所需的功能,因此还没有像 qsort 这样的C风格特性,但将来可能会添加。

目标是使 c-gull 中的代码量尽可能少,通过将所有重要的功能分解为具有更多Rust风格的API的独立crate,c-gull 仅通过包装这些API来实现C ABIs。

目前这是高度实验性的、不完整的,一些东西还没有优化。

c-gull的两种模式

c-gull有两个主要的Cargo功能:“take-charge”和“coexist-with-libc”。必须启用其中一个。

在“take-charge”模式下,c-gull负责进程,处理程序启动(通过Origin),提供 malloc(通过c-scape),以及其他事情。这需要一些额外的设置;有关详细信息,请参阅c-gull-example 示例crate。

在“coexist-with-libc”模式下,如果使用nightly Rust,可以将c-gull用作(部分)libc的替代品。要使用它,只需将Cargo.toml中的典型libc依赖项更改为以下内容

libc = { version = "<c-gull version>", package = "c-gull", features = ["coexist-with-libc"] }

and c-gull 会在尽可能多的地方用其自己的实现替换系统 libc 实现。特别是,它不能替换 malloc 或此配置中的任何 pthread 函数,但它可以替换许多其他东西。有关更多详细信息,请参阅 libc-replacement 示例

依赖关系

~11–21MB
~375K SLoC