X-Git-Url: https://git.xinqibao.xyz/slstatus.git/blobdiff_plain/16a97fbca129bca5656f76191c1b324b1649ec22..49d1e5fae2e4957abcf0f1056b3e8df8d695094c:/components/ram.c diff --git a/components/ram.c b/components/ram.c index 62e9807..f451601 100644 --- a/components/ram.c +++ b/components/ram.c @@ -9,7 +9,11 @@ { long free; - return (pscanf("/proc/meminfo", "MemFree: %ld kB\n", &free) == 1) ? + return (pscanf("/proc/meminfo", + "MemTotal: %ld kB\n" + "MemFree: %ld kB\n" + "MemAvailable: %ld kB\n", + &free, &free, &free) == 3) ? bprintf("%f", (float)free / 1024 / 1024) : NULL; } @@ -59,6 +63,9 @@ #include #include + #define LOG1024 10 + #define pagetok(size, pageshift) ((size) << (pageshift - LOG1024)) + inline int load_uvmexp(struct uvmexp *uvmexp) { @@ -79,8 +86,7 @@ if (load_uvmexp(&uvmexp)) { free_pages = uvmexp.npages - uvmexp.active; - free = (double) (free_pages * uvmexp.pagesize) / 1024 / - 1024 / 1024; + free = (float)(pagetok(free_pages, uvmexp.pageshift)) / 1024 / 1024; return bprintf("%f", free); } @@ -108,8 +114,7 @@ float total; if (load_uvmexp(&uvmexp)) { - total = (double) (uvmexp.npages * uvmexp.pagesize) / - 1024 / 1024 / 1024; + total = (float)(pagetok(uvmexp.npages, uvmexp.pageshift)) / 1024 / 1024; return bprintf("%f", total); } @@ -123,8 +128,7 @@ float used; if (load_uvmexp(&uvmexp)) { - used = (double) (uvmexp.active * uvmexp.pagesize) / - 1024 / 1024 / 1024; + used = (float)(pagetok(uvmexp.active, uvmexp.pageshift)) / 1024 / 1024; return bprintf("%f", used); }