summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2022-07-28 00:45:50 +0800
committerruki <[email protected]>2022-07-27 22:35:25 +0800
commitcbde43760f32030de7cf46c32a76421d86529271 (patch)
treea378261075ec1221878af45c73604190703b6b36
parent48ed21d6ac693e569cfb31d28ddcfbe1274e1d7d (diff)
impl meminfo for linux
-rw-r--r--core/src/xmake/os/meminfo.c19
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
{