Module ffi

Utilities related to FFI bindings.

This module provides utilities to handle data across non-Rust interfaces, like other programming languages and the underlying operating system. It is mainly of use for FFI (Foreign Function Interface) bindings and code that needs to exchange C-like strings with other languages.

Overview

Rust represents owned strings with the String type, and borrowed slices of strings with the str primitive. Both are always in UTF-8 encoding, and may contain nul bytes in the middle, i.e., if you look at the bytes that make up the string, there may be a \0 among them. Both String and str store their length explicitly; there are no nul terminators at the end of strings like in C.

C strings are different from Rust strings:

Representations of non-Rust strings

CString and CStr are useful when you need to transfer UTF-8 strings to and from languages with a C ABI, like Python.

OsString and OsStr are useful when you need to transfer strings to and from the operating system itself, or when capturing the output of external commands. Conversions between OsString, OsStr and Rust strings work similarly to those for CString and CStr.

Conversions

On Unix

On Unix, OsStr implements the std::os::unix::ffi::OsStrExt trait, which augments it with two methods, from_bytes and as_bytes. These do inexpensive conversions from and to byte slices.

Additionally, on Unix OsString implements the std::os::unix::ffi::OsStringExt trait, which provides from_vec and into_vec methods that consume their arguments, and take or produce vectors of u8.

On Windows

An OsStr can be losslessly converted to a native Windows string. And a native Windows string can be losslessly converted to an OsString.

On Windows, OsStr implements the std::os::windows::ffi::OsStrExt trait, which provides an encode_wide method. This provides an iterator that can be collected into a vector of u16. After a nul characters is appended, this is the same as a native Windows string.

Additionally, on Windows OsString implements the std::os::windows:ffi::OsStringExt trait, which provides a from_wide method to convert a native Windows string (without the terminating nul character) to an OsString.

Other platforms

Many other platforms provide their own extension traits in a std::os::*::ffi module.

On all platforms

On all platforms, OsStr consists of a sequence of bytes that is encoded as a superset of UTF-8; see OsString for more details on its encoding on different platforms.

For limited, inexpensive conversions from and to bytes, see OsStr::as_encoded_bytes and OsStr::from_encoded_bytes_unchecked.

For basic string processing, see OsStr::slice_encoded_bytes.

Modules