Xinqi Bao's Git
1 /* See LICENSE file for copyright and license details. */
14 if (pscanf("/proc/meminfo",
15 "MemTotal: %" PRIu64
" kB\n"
16 "MemFree: %" PRIu64
" kB\n"
17 "MemAvailable: %" PRIu64
" kB\n",
18 &free
, &free
, &free
) != 3) {
22 return fmt_human(free
* 1024, 1024);
28 uint64_t total
, free
, buffers
, cached
;
30 if (pscanf("/proc/meminfo",
31 "MemTotal: %" PRIu64
" kB\n"
32 "MemFree: %" PRIu64
" kB\n"
33 "MemAvailable: %" PRIu64
" kB\nBuffers: %ld kB\n"
34 "Cached: %" PRIu64
" kB\n",
35 &total
, &free
, &buffers
, &buffers
, &cached
) != 5) {
39 return bprintf("%d", 100 * ((total
- free
) -
40 (buffers
+ cached
)) / total
);
48 if (pscanf("/proc/meminfo", "MemTotal: %" PRIu64
" kB\n",
53 return fmt_human(total
* 1024, 1024);
59 uint64_t total
, free
, buffers
, cached
;
61 if (pscanf("/proc/meminfo",
62 "MemTotal: %" PRIu64
" kB\n"
63 "MemFree: %" PRIu64
" kB\n"
64 "MemAvailable: %" PRIu64
" kB\nBuffers: %" PRIu64
" kB\n"
65 "Cached: %" PRIu64
" kB\n",
66 &total
, &free
, &buffers
, &buffers
, &cached
) != 5) {
70 return fmt_human((total
- free
- buffers
- cached
) * 1024,
73 #elif defined(__OpenBSD__)
75 #include <sys/sysctl.h>
76 #include <sys/types.h>
80 #define pagetok(size, pageshift) (size_t)(size << (pageshift - LOG1024))
83 load_uvmexp(struct uvmexp
*uvmexp
)
85 int uvmexp_mib
[] = {CTL_VM
, VM_UVMEXP
};
88 size
= sizeof(*uvmexp
);
90 if (sysctl(uvmexp_mib
, 2, uvmexp
, &size
, NULL
, 0) >= 0) {
100 struct uvmexp uvmexp
;
103 if (load_uvmexp(&uvmexp
)) {
104 free_pages
= uvmexp
.npages
- uvmexp
.active
;
105 return fmt_human(pagetok(free_pages
, uvmexp
.pageshift
) *
115 struct uvmexp uvmexp
;
118 if (load_uvmexp(&uvmexp
)) {
119 percent
= uvmexp
.active
* 100 / uvmexp
.npages
;
120 return bprintf("%d", percent
);
129 struct uvmexp uvmexp
;
131 if (load_uvmexp(&uvmexp
)) {
132 return fmt_human(pagetok(uvmexp
.npages
,
133 uvmexp
.pageshift
) * 1024,
143 struct uvmexp uvmexp
;
145 if (load_uvmexp(&uvmexp
)) {
146 return fmt_human(pagetok(uvmexp
.active
,
147 uvmexp
.pageshift
) * 1024,