1use std::mem;
6
7#[repr(C)]
8#[derive(Copy, Clone, Debug)]
9pub struct proc_bsdinfo {
10 pub pbi_flags: u32,
12 pub pbi_status: u32,
13 pub pbi_xstatus: u32,
14 pub pbi_pid: u32,
15 pub pbi_ppid: u32,
16 pub pbi_uid: libc::uid_t,
17 pub pbi_gid: libc::gid_t,
18 pub pbi_ruid: libc::uid_t,
19 pub pbi_rgid: libc::gid_t,
20 pub pbi_svuid: libc::uid_t,
21 pub pbi_svgid: libc::gid_t,
22 pub rfu_1: u32,
24 pub pbi_comm: [libc::c_char; libc::MAXCOMLEN],
25 pub pbi_name: [libc::c_char; 2 * libc::MAXCOMLEN],
27 pub pbi_nfiles: u32,
28 pub pbi_pgid: u32,
29 pub pbi_pjobc: u32,
30 pub e_tdev: u32,
32 pub e_tpgid: u32,
34 pub pbi_nice: i32,
35 pub pbi_start_tvsec: u64,
36 pub pbi_start_tvusec: u64,
37}
38
39#[repr(C)]
56#[derive(Copy, Clone, Debug)]
57pub struct proc_taskinfo {
58 pub pti_virtual_size: u64,
60 pub pti_resident_size: u64,
62 pub pti_total_user: u64,
64 pub pti_total_system: u64,
65 pub pti_threads_user: u64,
67 pub pti_threads_system: u64,
68 pub pti_policy: i32,
70 pub pti_faults: i32,
72 pub pti_pageins: i32,
74 pub pti_cow_faults: i32,
76 pub pti_messages_sent: i32,
78 pub pti_messages_received: i32,
80 pub pti_syscalls_mach: i32,
82 pub pti_syscalls_unix: i32,
84 pub pti_csw: i32,
86 pub pti_threadnum: i32,
88 pub pti_numrunning: i32,
90 pub pti_priority: i32,
92}
93
94#[repr(C)]
95#[derive(Copy, Clone, Debug)]
96pub struct proc_taskallinfo {
97 pub pbsd: proc_bsdinfo,
98 pub ptinfo: proc_taskinfo,
99}
100
101#[repr(C)]
102#[derive(Copy, Clone, Debug)]
103pub struct proc_fdinfo {
104 pub proc_fd: i32,
105 pub proc_fdtype: u32,
106}
107
108#[repr(C)]
109#[derive(Copy, Clone)]
110pub struct vinfo_stat {
111 pub vst_dev: u32,
113 pub vst_mode: u16,
115 pub vst_nlink: u16,
117 pub vst_ino: u64,
119 pub vst_uid: libc::uid_t,
121 pub vst_gid: libc::gid_t,
123 pub vst_atime: i64,
125 pub vst_atimensec: i64,
127 pub vst_mtime: i64,
129 pub vst_mtimensec: i64,
131 pub vst_ctime: i64,
133 pub vst_ctimensec: i64,
135 pub vst_birthtime: i64,
137 pub vst_birthtimensec: i64,
139 pub vst_size: libc::off_t,
141 pub vst_blocks: i64,
143 pub vst_blksize: i32,
145 pub vst_flags: u32,
147 pub vst_gen: u32,
149 pub vst_rdev: u32,
151 pub vst_qspare: [i64; 2],
153}
154
155#[repr(C)]
156#[derive(Copy, Clone)]
157pub struct vnode_info {
158 pub vi_stat: vinfo_stat,
159 pub vi_type: libc::c_int,
160 pub vi_fsid: libc::fsid_t,
161 pub vi_pad: libc::c_int,
162}
163
164#[repr(C)]
165#[derive(Copy, Clone)]
166pub struct vnode_info_path {
167 pub vip_vi: vnode_info,
168 pub vip_path: [libc::c_char; crate::MAXPATHLEN],
169}
170
171#[repr(C)]
172#[derive(Copy, Clone)]
173pub struct proc_vnodepathinfo {
174 pub pvi_cdir: vnode_info_path,
175 pub pvi_rdir: vnode_info_path,
176}
177
178pub const PROC_PIDLISTFDS: libc::c_int = 1;
181pub const PROC_PIDLISTFD_SIZE: libc::c_int =
182 mem::size_of::<proc_fdinfo>() as libc::c_int; pub const PROC_PIDTASKALLINFO: libc::c_int = 2;
185pub const PROC_PIDTASKALLINFO_SIZE: libc::c_int =
186 mem::size_of::<proc_taskallinfo>() as libc::c_int; pub const PROC_PIDTBSDINFO: libc::c_int = 3;
189pub const PROC_PIDTBSDINFO_SIZE: libc::c_int =
190 mem::size_of::<proc_bsdinfo>() as libc::c_int; pub const PROC_PIDTASKINFO: libc::c_int = 4;
193pub const PROC_PIDTASKINFO_SIZE: libc::c_int =
194 mem::size_of::<proc_taskinfo>() as libc::c_int; pub const PROC_PIDLISTTHREADS: libc::c_int = 6;
201pub const PROC_PIDLISTTHREADS_SIZE: libc::c_int =
202 2 * mem::size_of::<u32>() as libc::c_int;
203
204pub const PROC_PIDVNODEPATHINFO: libc::c_int = 9;
211pub const PROC_PIDVNODEPATHINFO_SIZE: libc::c_int =
212 mem::size_of::<proc_vnodepathinfo>() as libc::c_int;
213
214extern "C" {
223 pub fn proc_pidinfo(
224 pid: libc::c_int,
225 flavor: libc::c_int,
226 arg: u64,
227 buffer: *mut libc::c_void,
228 buffersize: libc::c_int,
229 ) -> libc::c_int;
230}
231
232#[cfg(test)]
233mod tests {
234 use super::*;
235 use std::mem;
236
237 #[test]
238 fn test_size() {
239 assert_eq!(mem::size_of::<proc_fdinfo>(), 8);
240 assert_eq!(PROC_PIDLISTFD_SIZE, 8);
241
242 assert_eq!(mem::size_of::<proc_taskallinfo>(), 232);
243 assert_eq!(PROC_PIDTASKALLINFO_SIZE, 232);
244
245 assert_eq!(mem::size_of::<proc_bsdinfo>(), 136);
246 assert_eq!(PROC_PIDTBSDINFO_SIZE, 136);
247 }
248}