#nix #api-bindings #platform #libc #system-api #friendly #interface

cntr-nix

Rust 对 *nix API 的友好绑定(cntr 中使用的功能分支)

6 个版本

使用旧的 Rust 2015

0.11.3-pre12018年7月8日
0.11.2-pre12018年7月8日
0.11.1-pre12018年7月8日
0.11.0-pre12018年4月22日
0.10.0-pre12018年1月2日

581 in Unix API

MIT 许可证

795KB
15K SLoC

Rust 对 *nix API 的绑定(cntr 中使用的功能分支)

Build Status

文档(发布版)

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

依赖项