extern crate sysctl;
extern crate libc;
use libc::c_int;
use std::mem;
#[derive(Debug)]
#[repr(C)]
struct ClockInfo {
hz: c_int,
tick: c_int,
spare: c_int,
stathz: c_int,
profhz: c_int,
}
fn main() {
let ctl = "kern.clockrate";
println!("\nRead sysctl {} and parse result to struct ClockInfo", ctl);
let d = sysctl::description(ctl).unwrap();
println!("Description: {:?}", d);
let val_enum = sysctl::value(ctl).unwrap();
println!("ClockInfo raw data: {:?}", val_enum);
if let sysctl::CtlValue::Struct(val) = val_enum {
assert_eq!(mem::size_of::<ClockInfo>(), val.len());
let val_ptr: *const u8 = val.as_ptr();
let struct_ptr: *const ClockInfo = val_ptr as *const ClockInfo;
let struct_ref: &ClockInfo = unsafe { &*struct_ptr };
println!("{:?}", struct_ref);
}
}