My slstatus configuration
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.
 
 
 
 

158 рядки
2.9 KiB

  1. /* See LICENSE file for copyright and license details. */
  2. #include <stdio.h>
  3. #include "../util.h"
  4. #if defined(__linux__)
  5. #include <stdint.h>
  6. const char *
  7. ram_free(void)
  8. {
  9. uintmax_t free;
  10. if (pscanf("/proc/meminfo",
  11. "MemTotal: %ju kB\n"
  12. "MemFree: %ju kB\n"
  13. "MemAvailable: %ju kB\n",
  14. &free, &free, &free) != 3) {
  15. return NULL;
  16. }
  17. return fmt_human(free * 1024, 1024);
  18. }
  19. const char *
  20. ram_perc(void)
  21. {
  22. uintmax_t total, free, buffers, cached;
  23. if (pscanf("/proc/meminfo",
  24. "MemTotal: %ju kB\n"
  25. "MemFree: %ju kB\n"
  26. "MemAvailable: %ju kB\nBuffers: %ju kB\n"
  27. "Cached: %ju kB\n",
  28. &total, &free, &buffers, &buffers, &cached) != 5) {
  29. return NULL;
  30. }
  31. if (total == 0) {
  32. return NULL;
  33. }
  34. return bprintf("%d", 100 * ((total - free) - (buffers + cached))
  35. / total);
  36. }
  37. const char *
  38. ram_total(void)
  39. {
  40. uintmax_t total;
  41. if (pscanf("/proc/meminfo", "MemTotal: %ju kB\n", &total)
  42. != 1) {
  43. return NULL;
  44. }
  45. return fmt_human(total * 1024, 1024);
  46. }
  47. const char *
  48. ram_used(void)
  49. {
  50. uintmax_t total, free, buffers, cached;
  51. if (pscanf("/proc/meminfo",
  52. "MemTotal: %ju kB\n"
  53. "MemFree: %ju kB\n"
  54. "MemAvailable: %ju kB\nBuffers: %ju kB\n"
  55. "Cached: %ju kB\n",
  56. &total, &free, &buffers, &buffers, &cached) != 5) {
  57. return NULL;
  58. }
  59. return fmt_human((total - free - buffers - cached) * 1024,
  60. 1024);
  61. }
  62. #elif defined(__OpenBSD__)
  63. #include <stdlib.h>
  64. #include <sys/sysctl.h>
  65. #include <sys/types.h>
  66. #include <unistd.h>
  67. #define LOG1024 10
  68. #define pagetok(size, pageshift) (size_t)(size << (pageshift - LOG1024))
  69. inline int
  70. load_uvmexp(struct uvmexp *uvmexp)
  71. {
  72. int uvmexp_mib[] = {CTL_VM, VM_UVMEXP};
  73. size_t size;
  74. size = sizeof(*uvmexp);
  75. if (sysctl(uvmexp_mib, 2, uvmexp, &size, NULL, 0) >= 0) {
  76. return 1;
  77. }
  78. return 0;
  79. }
  80. const char *
  81. ram_free(void)
  82. {
  83. struct uvmexp uvmexp;
  84. int free_pages;
  85. if (load_uvmexp(&uvmexp)) {
  86. free_pages = uvmexp.npages - uvmexp.active;
  87. return fmt_human(pagetok(free_pages, uvmexp.pageshift) *
  88. 1024, 1024);
  89. }
  90. return NULL;
  91. }
  92. const char *
  93. ram_perc(void)
  94. {
  95. struct uvmexp uvmexp;
  96. int percent;
  97. if (load_uvmexp(&uvmexp)) {
  98. percent = uvmexp.active * 100 / uvmexp.npages;
  99. return bprintf("%d", percent);
  100. }
  101. return NULL;
  102. }
  103. const char *
  104. ram_total(void)
  105. {
  106. struct uvmexp uvmexp;
  107. if (load_uvmexp(&uvmexp)) {
  108. return fmt_human(pagetok(uvmexp.npages,
  109. uvmexp.pageshift) * 1024,
  110. 1024);
  111. }
  112. return NULL;
  113. }
  114. const char *
  115. ram_used(void)
  116. {
  117. struct uvmexp uvmexp;
  118. if (load_uvmexp(&uvmexp)) {
  119. return fmt_human(pagetok(uvmexp.active,
  120. uvmexp.pageshift) * 1024,
  121. 1024);
  122. }
  123. return NULL;
  124. }
  125. #endif