base/sys/unix/system_info.rs
1// Copyright 2023 The ChromiumOS Authors
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5use libc::sysconf;
6use libc::_SC_IOV_MAX;
7use libc::_SC_NPROCESSORS_CONF;
8use libc::_SC_PAGESIZE;
9
10use crate::Result;
11
12/// Safe wrapper for `sysconf(_SC_IOV_MAX)`.
13#[inline(always)]
14pub fn iov_max() -> usize {
15 // SAFETY:
16 // Trivially safe
17 unsafe { sysconf(_SC_IOV_MAX) as usize }
18}
19
20/// Safe wrapper for `sysconf(_SC_PAGESIZE)`.
21#[inline(always)]
22pub fn pagesize() -> usize {
23 // SAFETY:
24 // Trivially safe
25 unsafe { sysconf(_SC_PAGESIZE) as usize }
26}
27
28/// Returns the number of online logical cores on the system.
29#[inline(always)]
30pub fn number_of_logical_cores() -> Result<usize> {
31 // SAFETY:
32 // Safe because we pass a flag for this call and the host supports this system call
33 Ok(unsafe { sysconf(_SC_NPROCESSORS_CONF) } as usize)
34}