Xinqi Bao's Git
1 /* See LICENSE file for copyright and license details. */
3 #if defined (__OpenBSD__)
5 #include <sys/sysctl.h>
12 #if defined(__linux__)
18 return (pscanf("/proc/meminfo", "MemFree: %ld kB\n", &free
) == 1) ?
19 bprintf("%f", (float)free
/ 1024 / 1024) : NULL
;
25 long total
, free
, buffers
, cached
;
27 return (pscanf("/proc/meminfo",
30 "MemAvailable: %ld kB\nBuffers: %ld kB\n"
32 &total
, &free
, &buffers
, &buffers
, &cached
) == 5) ?
33 bprintf("%d", 100 * ((total
- free
) - (buffers
+ cached
)) / total
) :
42 return (pscanf("/proc/meminfo", "MemTotal: %ld kB\n", &total
) == 1) ?
43 bprintf("%f", (float)total
/ 1024 / 1024) : NULL
;
49 long total
, free
, buffers
, cached
;
51 return (pscanf("/proc/meminfo",
54 "MemAvailable: %ld kB\nBuffers: %ld kB\n"
56 &total
, &free
, &buffers
, &buffers
, &cached
) == 5) ?
57 bprintf("%f", (float)(total
- free
- buffers
- cached
) / 1024 / 1024) :
60 #elif defined(__OpenBSD__)
62 load_uvmexp(struct uvmexp
*uvmexp
)
64 int uvmexp_mib
[] = {CTL_VM
, VM_UVMEXP
};
67 size
= sizeof(*uvmexp
);
69 return sysctl(uvmexp_mib
, 2, uvmexp
, &size
, NULL
, 0) >= 0 ? 1 : 0;
79 if (load_uvmexp(&uvmexp
)) {
80 free_pages
= uvmexp
.npages
- uvmexp
.active
;
81 free
= (double) (free_pages
* uvmexp
.pagesize
) / 1024 / 1024 / 1024;
82 return bprintf("%f", free
);
94 if (load_uvmexp(&uvmexp
)) {
95 percent
= uvmexp
.active
* 100 / uvmexp
.npages
;
96 return bprintf("%d", percent
);
105 struct uvmexp uvmexp
;
108 if (load_uvmexp(&uvmexp
)) {
109 total
= (double) (uvmexp
.npages
* uvmexp
.pagesize
) / 1024 / 1024 / 1024;
110 return bprintf("%f", total
);
119 struct uvmexp uvmexp
;
122 if (load_uvmexp(&uvmexp
)) {
123 used
= (double) (uvmexp
.active
* uvmexp
.pagesize
) / 1024 / 1024 / 1024;
124 return bprintf("%f", used
);