cpu.c 687 B

1234567891011121314151617181920212223242526272829
  1. #include "cpu.h"
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. int ark_sys_cpu_get_usage(void) {
  6. FILE *fp = fopen("/proc/stat", "r");
  7. if (!fp) return 0;
  8. char line[256];
  9. if (!fgets(line, sizeof(line), fp)) {
  10. fclose(fp);
  11. return 0;
  12. }
  13. fclose(fp);
  14. uint64_t user = 0, nice = 0, system = 0, idle = 0;
  15. if (sscanf(line, "cpu %lu %lu %lu %lu", &user, &nice, &system, &idle) < 4) {
  16. return 0;
  17. }
  18. uint64_t total = user + nice + system + idle;
  19. if (total == 0) return 0;
  20. int usage = (total - idle) * 100 / total;
  21. if (usage < 0) usage = 0;
  22. if (usage > 100) usage = 100;
  23. return usage;
  24. }