1# libc - Raw FFI bindings to platforms' system libraries 2 3[![GHA Status]][GitHub Actions] [![Cirrus CI Status]][Cirrus CI] [![Latest Version]][crates.io] [![Documentation]][docs.rs] ![License] 4 5`libc` provides all of the definitions necessary to easily interoperate with C 6code (or "C-like" code) on each of the platforms that Rust supports. This 7includes type definitions (e.g. `c_int`), constants (e.g. `EINVAL`) as well as 8function headers (e.g. `malloc`). 9 10This crate exports all underlying platform types, functions, and constants under 11the crate root, so all items are accessible as `libc::foo`. The types and values 12of all the exported APIs match the platform that libc is compiled for. 13 14More detailed information about the design of this library can be found in its 15[associated RFC][rfc]. 16 17[rfc]: https://github.com/rust-lang/rfcs/blob/master/text/1291-promote-libc.md 18 19## Usage 20 21Add the following to your `Cargo.toml`: 22 23```toml 24[dependencies] 25libc = "0.2" 26``` 27 28## Features 29 30* `std`: by default `libc` links to the standard library. Disable this 31 feature to remove this dependency and be able to use `libc` in `#![no_std]` 32 crates. 33 34* `extra_traits`: all `struct`s implemented in `libc` are `Copy` and `Clone`. 35 This feature derives `Debug`, `Eq`, `Hash`, and `PartialEq`. 36 37* `const-extern-fn`: Changes some `extern fn`s into `const extern fn`s. 38 If you use Rust >= 1.62, this feature is implicitly enabled. 39 Otherwise it requires a nightly rustc. 40 41* **deprecated**: `use_std` is deprecated, and is equivalent to `std`. 42 43## Rust version support 44 45The minimum supported Rust toolchain version is currently **Rust 1.13.0**. 46(libc does not currently have any policy regarding changes to the minimum 47supported Rust version; such policy is a work in progress.) APIs requiring 48newer Rust features are only available on newer Rust toolchains: 49 50| Feature | Version | 51|----------------------|---------| 52| `union` | 1.19.0 | 53| `const mem::size_of` | 1.24.0 | 54| `repr(align)` | 1.25.0 | 55| `extra_traits` | 1.25.0 | 56| `core::ffi::c_void` | 1.30.0 | 57| `repr(packed(N))` | 1.33.0 | 58| `cfg(target_vendor)` | 1.33.0 | 59| `const-extern-fn` | 1.62.0 | 60 61## Platform support 62 63[Platform-specific documentation (master branch)][docs.master]. 64 65See 66[`ci/build.sh`](https://github.com/rust-lang/libc/blob/master/ci/build.sh) 67for the platforms on which `libc` is guaranteed to build for each Rust 68toolchain. The test-matrix at [GitHub Actions] and [Cirrus CI] show the 69platforms in which `libc` tests are run. 70 71<div class="platform_docs"></div> 72 73## License 74 75This project is licensed under either of 76 77* [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0) 78 ([LICENSE-APACHE](https://github.com/rust-lang/libc/blob/master/LICENSE-APACHE)) 79 80* [MIT License](https://opensource.org/licenses/MIT) 81 ([LICENSE-MIT](https://github.com/rust-lang/libc/blob/master/LICENSE-MIT)) 82 83at your option. 84 85## Contributing 86 87We welcome all people who want to contribute. Please see the [contributing 88instructions] for more information. 89 90[contributing instructions]: https://github.com/rust-lang/libc/blob/master/CONTRIBUTING.md 91 92Contributions in any form (issues, pull requests, etc.) to this project 93must adhere to Rust's [Code of Conduct]. 94 95[Code of Conduct]: https://www.rust-lang.org/policies/code-of-conduct 96 97Unless you explicitly state otherwise, any contribution intentionally submitted 98for inclusion in `libc` by you, as defined in the Apache-2.0 license, shall be 99dual licensed as above, without any additional terms or conditions. 100 101[GitHub Actions]: https://github.com/rust-lang/libc/actions 102[GHA Status]: https://github.com/rust-lang/libc/workflows/CI/badge.svg 103[Cirrus CI]: https://cirrus-ci.com/github/rust-lang/libc 104[Cirrus CI Status]: https://api.cirrus-ci.com/github/rust-lang/libc.svg 105[crates.io]: https://crates.io/crates/libc 106[Latest Version]: https://img.shields.io/crates/v/libc.svg 107[Documentation]: https://docs.rs/libc/badge.svg 108[docs.rs]: https://docs.rs/libc 109[License]: https://img.shields.io/crates/l/libc.svg 110[docs.master]: https://rust-lang.github.io/libc/#platform-specific-documentation 111