procfs_core/
sysvipc_shm.rs1use std::io;
2
3use super::{expect, ProcResult};
4use std::str::FromStr;
5
6#[cfg(feature = "serde1")]
7use serde::{Deserialize, Serialize};
8
9#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
12#[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))]
13#[allow(non_snake_case)]
14pub struct Shm {
15 pub key: i32,
17 pub shmid: u64,
19 pub perms: u16,
21 pub size: u64,
23 pub cpid: i32,
25 pub lpid: i32,
27 pub nattch: u32,
29 pub uid: u16,
31 pub gid: u16,
33 pub cuid: u16,
35 pub cgid: u16,
37 pub atime: u64,
39 pub dtime: u64,
41 pub ctime: u64,
43 pub rss: u64,
45 pub swap: u64,
47}
48
49#[derive(Debug, Clone)]
51#[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))]
52pub struct SharedMemorySegments(pub Vec<Shm>);
53
54impl super::FromBufRead for SharedMemorySegments {
55 fn from_buf_read<R: io::BufRead>(r: R) -> ProcResult<Self> {
56 let mut vec = Vec::new();
57
58 for line in r.lines().skip(1) {
61 let line = expect!(line);
62 let mut s = line.split_whitespace();
63
64 let key = expect!(i32::from_str(expect!(s.next())));
65 let shmid = expect!(u64::from_str(expect!(s.next())));
66 let perms = expect!(u16::from_str(expect!(s.next())));
67 let size = expect!(u64::from_str(expect!(s.next())));
68 let cpid = expect!(i32::from_str(expect!(s.next())));
69 let lpid = expect!(i32::from_str(expect!(s.next())));
70 let nattch = expect!(u32::from_str(expect!(s.next())));
71 let uid = expect!(u16::from_str(expect!(s.next())));
72 let gid = expect!(u16::from_str(expect!(s.next())));
73 let cuid = expect!(u16::from_str(expect!(s.next())));
74 let cgid = expect!(u16::from_str(expect!(s.next())));
75 let atime = expect!(u64::from_str(expect!(s.next())));
76 let dtime = expect!(u64::from_str(expect!(s.next())));
77 let ctime = expect!(u64::from_str(expect!(s.next())));
78 let rss = expect!(u64::from_str(expect!(s.next())));
79 let swap = expect!(u64::from_str(expect!(s.next())));
80
81 let shm = Shm {
82 key,
83 shmid,
84 perms,
85 size,
86 cpid,
87 lpid,
88 nattch,
89 uid,
90 gid,
91 cuid,
92 cgid,
93 atime,
94 dtime,
95 ctime,
96 rss,
97 swap,
98 };
99
100 vec.push(shm);
101 }
102
103 Ok(SharedMemorySegments(vec))
104 }
105}