diff options
| author | drkhsh <me@drkhsh.at> | 2025-07-24 22:41:25 +0200 |
|---|---|---|
| committer | drkhsh <me@drkhsh.at> | 2025-07-24 22:41:25 +0200 |
| commit | 8723e8b8c69c08bae8abe02ea1f4a49758b8bdfc (patch) | |
| tree | 47dc5b477c58d6080f360adf3fcb3097ccb173f4 /util.c | |
| parent | 6eb7887853537ac0cf91517019328e038382bdd8 (diff) | |
| download | slstatus-8723e8b8c69c08bae8abe02ea1f4a49758b8bdfc.tar.gz | |
more concise memory calculation on Linux
more flexible parsing for /proc/meminfo to take shared and reclaimable
memory into account. this matches the output with free(1).
additionally this could fix some corner cases, as the order of fields in
/proc/meminfo is not strictly defined.
slstatus:
percent 81% free 2.5 Gi total 23.4 Gi used 19.0 Gi
free(1):
total used free shared buff/cache available
Mem: 23Gi 19Gi 2.5Gi 1.3Gi 3.2Gi 3.6Gi
Diffstat (limited to 'util.c')
| -rw-r--r-- | util.c | 17 |
1 files changed, 17 insertions, 0 deletions
@@ -139,3 +139,20 @@ pscanf(const char *path, const char *fmt, ...) return (n == EOF) ? -1 : n; } + +int +lscanf(FILE *fp, const char *key, const char *fmt, void *res) +{ + int n; + char line[256]; + + n = -1; + while (fgets(line, sizeof(line), fp)) + if (strncmp(line, key, strlen(key)) == 0) { + n = sscanf(line + strlen(key), fmt, res); + break; + } + + rewind(fp); + return (n == 1) ? 1 : -1; +} |
