Xinqi Bao's Git
7c0870c12eb83dc51e8e4446305fdf578cce371c
1 /* See LICENSE file for copyright and license details. */
12 if (pscanf("/proc/meminfo",
15 "MemAvailable: %ld kB\n",
16 &free
, &free
, &free
) != 3) {
20 return fmt_human_2(free
* 1024, "B");
26 long total
, free
, buffers
, cached
;
28 if (pscanf("/proc/meminfo",
31 "MemAvailable: %ld kB\nBuffers: %ld kB\n"
33 &total
, &free
, &buffers
, &buffers
, &cached
) != 5) {
37 return bprintf("%d%%", 100 * ((total
- free
) -
38 (buffers
+ cached
)) / total
);
46 if (pscanf("/proc/meminfo", "MemTotal: %ld kB\n",
51 return fmt_human_2(total
* 1024, "B");
57 long total
, free
, buffers
, cached
;
59 if (pscanf("/proc/meminfo",
62 "MemAvailable: %ld kB\nBuffers: %ld kB\n"
64 &total
, &free
, &buffers
, &buffers
, &cached
) != 5) {
68 return fmt_human_2((total
- free
- buffers
- cached
) * 1024,
71 #elif defined(__OpenBSD__)
73 #include <sys/sysctl.h>
74 #include <sys/types.h>
78 #define pagetok(size, pageshift) ((size) << (pageshift - LOG1024))
81 load_uvmexp(struct uvmexp
*uvmexp
)
83 int uvmexp_mib
[] = {CTL_VM
, VM_UVMEXP
};
86 size
= sizeof(*uvmexp
);
88 return sysctl(uvmexp_mib
, 2, uvmexp
, &size
, NULL
, 0) >= 0 ? 1 : 0;
97 if (load_uvmexp(&uvmexp
)) {
98 free_pages
= uvmexp
.npages
- uvmexp
.active
;
99 return fmt_human_2(pagetok(free_pages
, uvmexp
.pageshift
) * 1024, "B");
108 struct uvmexp uvmexp
;
111 if (load_uvmexp(&uvmexp
)) {
112 percent
= uvmexp
.active
* 100 / uvmexp
.npages
;
113 return bprintf("%d%%", percent
);
122 struct uvmexp uvmexp
;
124 if (load_uvmexp(&uvmexp
)) {
125 return fmt_human_2(pagetok(uvmexp
.npages
, uvmexp
.pageshift
) * 1024, "B");
134 struct uvmexp uvmexp
;
136 if (load_uvmexp(&uvmexp
)) {
137 return fmt_human_2(pagetok(uvmexp
.active
, uvmexp
.pageshift
) * 1024, "B");