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) { 
  43                 return bprintf("%d", 100 * ((total 
- free
) - 
  44                                             (buffers 
+ cached
)) / total
); 
  52                 if (pscanf("/proc/meminfo", "MemTotal: %" PRIu64 
" kB\n", 
  57                 return fmt_human(total 
* 1024, 1024); 
  63                 uint64_t total
, free
, buffers
, cached
; 
  65                 if (pscanf("/proc/meminfo", 
  66                            "MemTotal: %" PRIu64 
" kB\n" 
  67                            "MemFree: %" PRIu64 
" kB\n" 
  68                            "MemAvailable: %" PRIu64 
" kB\nBuffers: %" PRIu64 
" kB\n" 
  69                            "Cached: %" PRIu64 
" kB\n", 
  70                            &total
, &free
, &buffers
, &buffers
, &cached
) != 5) { 
  74                 return fmt_human((total 
- free 
- buffers 
- cached
) * 1024, 
  77 #elif defined(__OpenBSD__) 
  79         #include <sys/sysctl.h> 
  80         #include <sys/types.h> 
  84         #define pagetok(size, pageshift) (size_t)(size << (pageshift - LOG1024)) 
  87         load_uvmexp(struct uvmexp 
*uvmexp
) 
  89                 int uvmexp_mib
[] = {CTL_VM
, VM_UVMEXP
}; 
  92                 size 
= sizeof(*uvmexp
); 
  94                 if (sysctl(uvmexp_mib
, 2, uvmexp
, &size
, NULL
, 0) >= 0) { 
 104                 struct uvmexp uvmexp
; 
 107                 if (load_uvmexp(&uvmexp
)) { 
 108                         free_pages 
= uvmexp
.npages 
- uvmexp
.active
; 
 109                         return fmt_human(pagetok(free_pages
, uvmexp
.pageshift
) * 
 119                 struct uvmexp uvmexp
; 
 122                 if (load_uvmexp(&uvmexp
)) { 
 123                         percent 
= uvmexp
.active 
* 100 / uvmexp
.npages
; 
 124                         return bprintf("%d", percent
); 
 133                 struct uvmexp uvmexp
; 
 135                 if (load_uvmexp(&uvmexp
)) { 
 136                         return fmt_human(pagetok(uvmexp
.npages
, 
 137                                                  uvmexp
.pageshift
) * 1024, 
 147                 struct uvmexp uvmexp
; 
 149                 if (load_uvmexp(&uvmexp
)) { 
 150                         return fmt_human(pagetok(uvmexp
.active
, 
 151                                                  uvmexp
.pageshift
) * 1024,