My slstatus configuration
Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.
 
 
 
 

130 wiersze
2.6 KiB

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