diff options
| author | ruki <[email protected]> | 2022-07-28 00:45:50 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2022-07-27 22:35:25 +0800 |
| commit | cbde43760f32030de7cf46c32a76421d86529271 (patch) | |
| tree | a378261075ec1221878af45c73604190703b6b36 | |
| parent | 48ed21d6ac693e569cfb31d28ddcfbe1274e1d7d (diff) | |
impl meminfo for linux
| -rw-r--r-- | core/src/xmake/os/meminfo.c | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/core/src/xmake/os/meminfo.c b/core/src/xmake/os/meminfo.c index 4729664f1..29741a2b7 100644 --- a/core/src/xmake/os/meminfo.c +++ b/core/src/xmake/os/meminfo.c @@ -79,6 +79,7 @@ static tb_bool_t xm_os_meminfo_stats(tb_int_t* ptotalsize, tb_int_t* pavailsize) */ if (tb_file_info("/proc/meminfo", tb_null)) { + tb_bool_t ok = tb_false; FILE* fp = fopen("/proc/meminfo", "r"); if (fp) { @@ -88,10 +89,26 @@ static tb_bool_t xm_os_meminfo_stats(tb_int_t* ptotalsize, tb_int_t* pavailsize) if (!ferror(fp) && len) { tb_int64_t totalsize = xm_os_meminfo_get_value(buffer, "MemTotal:"); - tb_trace_i("totalsize: %lld", totalsize); + tb_int64_t availsize = xm_os_meminfo_get_value(buffer, "MemAvailable:"); + if (availsize <= 0) + { + tb_int64_t cachesize = xm_os_meminfo_get_value(buffer, "Cached:"); + tb_int64_t freesize = xm_os_meminfo_get_value(buffer, "MemFree:"); + tb_int64_t buffersize = xm_os_meminfo_get_value(buffer, "Buffers:"); + tb_int64_t shmemsize = xm_os_meminfo_get_value(buffer, "Shmem:"); + if (cachesize >= 0 && freesize >= 0 && buffersize >= 0 && shmemsize >= 0) + availsize = freesize + buffersize + cachesize - shmemsize; + } + if (totalsize > 0 && availsize >= 0) + { + *ptotalsize = (tb_int_t)(totalsize / 1024); + *pavailsize = (tb_int_t)(availsize / 1024); + ok = tb_true; + } } fclose(fp); } + return ok; } else { |
