unsafe-io

Non-owning unsafe I/O

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

Have you ever found yourself writing essentially the same code twice, once for [RawFd] for Posix-ish platforms and once for [RawHandle] or [RawSocket] for Windows platforms? This crate abstracts over those platform differences.

Being non-owning, these handles operate much like raw pointers in Rust. They are considered safe to construct, but unsafe to use in any way that depends on the resource they point to.

This library is meant to be a building block for higher-level libraries, such as the [io-streams] crate.

Brief Overview

The central type of this library is [UnsafeHandle]. On Posix-ish platforms it just contains a [RawFd]. On Windows, it contains an enum of either a RawHandle (for files and pipes), a RawSocket (for sockets), or a stdio handle (for stdin, stdout, stderr), allowing it to abstract over different types of I/O in a similar manner.

[UnsafeFile] and [UnsafeSocket] are similar non-owning types, but which only contain one type, instead of an enum, which allow them to be used in contexts that only support one type.

The [crate documentation] has a complete overview and examples.