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}