base/sys/unix/
system_info.rs1use libc::sysconf;
6use libc::_SC_IOV_MAX;
7use libc::_SC_NPROCESSORS_CONF;
8use libc::_SC_NPROCESSORS_ONLN;
9use libc::_SC_PAGESIZE;
10
11use crate::errno_result;
12use crate::Result;
13
14const IOV_MAX_DEFAULT: usize = 1024;
16
17#[inline(always)]
19pub fn iov_max() -> usize {
20 let iov_max = unsafe { sysconf(_SC_IOV_MAX) };
23 if iov_max < 0 {
24 IOV_MAX_DEFAULT
25 } else {
26 iov_max as usize
27 }
28}
29
30#[inline(always)]
32pub fn pagesize() -> usize {
33 let pagesize = unsafe { sysconf(_SC_PAGESIZE) };
37 if pagesize <= 0 {
38 panic!("Error reading system page size, got invalid value.");
39 }
40 pagesize as usize
41}
42
43#[inline(always)]
45pub fn number_of_logical_cores() -> Result<usize> {
46 let nprocs_conf = unsafe { sysconf(_SC_NPROCESSORS_CONF) };
49 if nprocs_conf < 0 {
50 errno_result()
51 } else {
52 Ok(nprocs_conf as usize)
53 }
54}
55
56#[inline(always)]
58pub fn number_of_online_cores() -> Result<usize> {
59 let nprocs_onln = unsafe { sysconf(_SC_NPROCESSORS_ONLN) };
62 if nprocs_onln < 0 {
63 errno_result()
64 } else {
65 Ok(nprocs_onln as usize)
66 }
67}