Xinqi Bao's Git
f451601862dd1555d16e9eb6adfa9ae9d31786e2
1 /* See LICENSE file for copyright and license details. */
12 return (pscanf("/proc/meminfo",
15 "MemAvailable: %ld kB\n",
16 &free
, &free
, &free
) == 3) ?
17 bprintf("%f", (float)free
/ 1024 / 1024) : NULL
;
23 long total
, free
, buffers
, cached
;
25 return (pscanf("/proc/meminfo",
28 "MemAvailable: %ld kB\nBuffers: %ld kB\n"
30 &total
, &free
, &buffers
, &buffers
, &cached
) == 5) ?
31 bprintf("%d", 100 * ((total
- free
) - (buffers
+ cached
)) /
41 return (pscanf("/proc/meminfo", "MemTotal: %ld kB\n", &total
) == 1) ?
42 bprintf("%f", (float)total
/ 1024 / 1024) : NULL
;
48 long total
, free
, buffers
, cached
;
50 return (pscanf("/proc/meminfo",
53 "MemAvailable: %ld kB\nBuffers: %ld kB\n"
55 &total
, &free
, &buffers
, &buffers
, &cached
) == 5) ?
56 bprintf("%f", (float)(total
- free
- buffers
- cached
) /
60 #elif defined(__OpenBSD__)
62 #include <sys/sysctl.h>
63 #include <sys/types.h>
67 #define pagetok(size, pageshift) ((size) << (pageshift - LOG1024))
70 load_uvmexp(struct uvmexp
*uvmexp
)
72 int uvmexp_mib
[] = {CTL_VM
, VM_UVMEXP
};
75 size
= sizeof(*uvmexp
);
77 return sysctl(uvmexp_mib
, 2, uvmexp
, &size
, NULL
, 0) >= 0 ? 1 : 0;
87 if (load_uvmexp(&uvmexp
)) {
88 free_pages
= uvmexp
.npages
- uvmexp
.active
;
89 free
= (float)(pagetok(free_pages
, uvmexp
.pageshift
)) / 1024 / 1024;
90 return bprintf("%f", free
);
102 if (load_uvmexp(&uvmexp
)) {
103 percent
= uvmexp
.active
* 100 / uvmexp
.npages
;
104 return bprintf("%d", percent
);
113 struct uvmexp uvmexp
;
116 if (load_uvmexp(&uvmexp
)) {
117 total
= (float)(pagetok(uvmexp
.npages
, uvmexp
.pageshift
)) / 1024 / 1024;
118 return bprintf("%f", total
);
127 struct uvmexp uvmexp
;
130 if (load_uvmexp(&uvmexp
)) {
131 used
= (float)(pagetok(uvmexp
.active
, uvmexp
.pageshift
)) / 1024 / 1024;
132 return bprintf("%f", used
);