My slstatus configuration
Non puoi selezionare più di 25 argomenti Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.
 
 
 
 

130 righe
2.6 KiB

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