20 releases (5 breaking)
|new 0.23.5||Sep 20, 2021|
|0.23.4||Sep 20, 2021|
|0.22.4||Sep 11, 2021|
|0.21.0||Sep 3, 2021|
|0.18.0||Aug 16, 2021|
#26 in Unix APIs
4,573 downloads per month
Used in 30 crates (17 directly)
Safe Rust ("rs") bindings to POSIX-like/Unix-like/Linux ("ix") syscalls
A Bytecode Alliance project
rsix (formerly known as
posish) provides efficient memory-safe and
I/O-safe wrappers to POSIX-like, Unix-like, and Linux syscall APIs, with
configurable backends. It uses Rust references, slices, and return values
instead of raw pointers, and
io-lifetimes instead of raw file descriptors,
providing memory safety and I/O safety. It uses
Results for reporting
bitflags instead of bare integer flags, an
Arg trait with
optimizations to efficiently accept any Rust string type, and several other
rsix currently has two backends available:
linux_raw backend is enabled by default on Linux on x86-64, x86, aarch64,
riscv64gc and arm (v5 onwards), and uses raw Linux system calls and vDSO calls.
It supports stable as well as nightly Rust.
- By being implemented entirely in Rust, avoiding
errno, and pthread cancellation, and employing some specialized optimizations, most functions compile down to very efficient code. On nightly Rust, they can often be fully inlined into user code.
- Most functions in
linux_rawpreserve memory and I/O safety all the way down to the syscalls.
linux_rawuses a 64-bit
time_ttype on all platforms, avoiding the y2038 bug.
libc backend is enabled by default on all other platforms, and can be
set explicitly for any target by setting
It uses the
libc crate which provides bindings to native
and is portable to many OS's.
rsix is similar to
a relatively new project with less overall coverage, architected for
I/O safety with most APIs using
AsFd to manipulate file
descriptors rather than
File or even
c_int, and supporting multiple
backends so that it can use direct syscalls while still being usable on all
libc supports. Like
rsix has an optimized and flexible
filename argument mechanism that allows users to use a variety of string types,
including non-UTF-8 string types.
relibc is a similar project which aims to be a full "libc", including
C-compatible interfaces and higher-level C/POSIX standard-library
rsix just aims to provide safe and idiomatic Rust interfaces
to low-level syscalls.
relibc also doesn't tend to support features not
supported on Redox, such as
*at functions like
openat, which are
important features for
rsix has its own code for making direct syscalls, similar to the
scall crates, though
rsix currently only supports direct syscalls on
Linux on x86_64, x86, aarch64, and riscv64.
rsix can use either the unstable
asm! macro or out-of-line
.s files so it supports both Stable and
rsix's syscalls report errors using an optimized
rsix supports Linux's vDSO mechanism to optimize Linux
all architectures, and all Linux system calls on x86.
*at functions are similar to the
openat crate, but
provides them as free functions rather than associated functions of a
cwd() function exposes the special
AT_FDCWD value in a safe
way, so users don't need to open
. to get a current-directory handle.
openat2 function is similar to the
openat2 crate, but uses
I/O safety types rather than
rsix does not provide dynamic feature
detection, so users must handle