6 个版本
使用旧的 Rust 2015
0.11.3-pre1 | 2018年7月8日 |
---|---|
0.11.2-pre1 | 2018年7月8日 |
0.11.1-pre1 | 2018年7月8日 |
0.11.0-pre1 | 2018年4月22日 |
0.10.0-pre1 | 2018年1月2日 |
581 in Unix API
795KB
15K SLoC
Rust 对 *nix API 的绑定(cntr 中使用的功能分支)
Nix 旨在提供对各种 *nix 平台 API(Linux、Darwin 等)的友好绑定。目标不是提供 100% 统一的接口,而是在提供平台特定 API 的同时统一尽可能多的内容。
对于许多系统 API,Nix 提供了比通过 libc crate 暴露的不安全 API 更安全的替代方案。这是通过使用类型/抽象包装 libc 功能来强制合法/安全的使用来实现的。
以下是一个 Nix 提供的例子,比较了 libc 和 nix 在 gethostname 系统调用中暴露的内容的差异
// libc api (unsafe, requires handling return code/errno)
pub unsafe extern fn gethostname(name: *mut c_char, len: size_t) -> c_int;
// nix api (returns a nix::Result<CStr>)
pub fn gethostname<'a>(buffer: &'a mut [u8]) -> Result<&'a CStr>;
支持的平台
nix 目标支持分为两个级别。虽然 nix 尝试支持由 libc 支持的所有平台,但由于技术或人力限制,只有一些平台得到积极支持。平台支持分为三个级别
- 第一级 - 在 CI 中运行此目标的构建和测试。任一失败将阻止新代码的加入。
- 第二级 - 在 CI 中运行此目标的构建。构建过程中的失败将阻止新代码的加入。可以运行测试,但测试失败不会阻止新代码的加入。
- 第三级 - 在 CI 中运行此目标的构建。构建过程中的失败 不会 阻止新代码的加入。可以运行测试,但测试失败不会阻止新代码的加入。
以下目标都由 nix 在 Rust 1.20.0 或更高版本上支持(除非另有说明)
第一级
- aarch64-unknown-linux-gnu
- arm-unknown-linux-gnueabi
- armv7-unknown-linux-gnueabihf
- i686-apple-darwin
- i686-unknown-freebsd
- i686-unknown-linux-gnu
- i686-unknown-linux-musl
- mips-unknown-linux-gnu
- mips64-unknown-linux-gnuabi64
- mips64el-unknown-linux-gnuabi64
- mipsel-unknown-linux-gnu
- powerpc64-unknown-linux-gnu
- powerpc64le-unknown-linux-gnu
- x86_64-apple-darwin
- x86_64-unknown-freebsd
- x86_64-unknown-linux-gnu
- x86_64-unknown-linux-musl
第二层
- aarch64-apple-ios
- aarch64-linux-android
- arm-linux-androideabi
- arm-unknown-linux-musleabi
- armv7-apple-ios
- armv7-linux-androideabi
- armv7s-apple-ios
- i386-apple-ios
- i686-linux-android
- powerpc-unknown-linux-gnu
- s390x-unknown-linux-gnu
- x86_64-apple-ios
- x86_64-linux-android
- x86_64-unknown-netbsd
使用方法
要使用 nix
,首先将以下内容添加到您的 Cargo.toml
[dependencies]
nix = "0.11.0"
然后,将以下内容添加到您的 crate 根目录
extern crate nix;
贡献
欢迎贡献。请参阅 CONTRIBUTING 以获取更多详细信息。
欢迎您加入 Gitter 上的 nix-rust/nix 频道,讨论 nix
开发。
许可证
Nix 在 MIT 许可证下授权。有关更多详细信息,请参阅 LICENSE。