File: simple.c

package info (click to toggle)
rustc 1.85.0%2Bdfsg3-1
  • links: PTS, VCS
  • area: main
  • in suites: experimental, forky, sid, trixie
  • size: 893,396 kB
  • sloc: xml: 158,127; python: 35,830; javascript: 19,497; cpp: 19,002; sh: 17,245; ansic: 13,127; asm: 4,376; makefile: 1,051; perl: 29; lisp: 29; ruby: 19; sql: 11
file content (100 lines) | stat: -rw-r--r-- 3,603 bytes parent folder | download | duplicates (11)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
// Take a look at the license at the top of the repository in the LICENSE file.

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <pthread.h>
#include "sysinfo.h"

void print_process(CProcess process) {
    RString exe = sysinfo_process_executable_path(process);
    printf("process[%d]: parent: %d,\n"
           "             cpu_usage: %f,\n"
           "             memory: %ld,\n"
           "             virtual memory: %ld,\n"
           "             executable path: '%s'\n",
           sysinfo_process_pid(process),
           sysinfo_process_parent_pid(process),
           sysinfo_process_cpu_usage(process),
           sysinfo_process_memory(process),
           sysinfo_process_virtual_memory(process),
           exe);
    sysinfo_rstring_free(exe);
}

void check_tasks(CSystem system) {
#ifdef __linux__
    bool task_loop(pid_t pid, CProcess process, void *data) {
        (void)data;
        printf("  ");
        print_process(process);
        return true;
    }

    void *sleeping_func(void *data) {
        sleep(3);
        return data;
    }
    pthread_t thread;
    pthread_create(&thread, NULL, sleeping_func, NULL);
    sysinfo_refresh_processes(system);
    CProcess process = sysinfo_process_by_pid(system, getpid());
    printf("\n== Task(s) for current process: ==\n");
    print_process(process);
    printf("Got %ld task(s)\n", sysinfo_process_tasks(process, task_loop, NULL));
#else
    (void)system;
#endif
}

bool process_loop(pid_t pid, CProcess process, void *data) {
    unsigned int *i = data;

    print_process(process);
    *i += 1;
    return *i < 10;
}

int main() {
    CSystem system = sysinfo_init();
    CNetworks networks = sysinfo_networks_init();

    sysinfo_refresh_all(system);
    sysinfo_networks_refresh(networks);

    printf("os name:              %s\n", sysinfo_system_name(system));
    printf("os version:           %s\n", sysinfo_system_version(system));
    printf("kernel version:       %s\n", sysinfo_system_kernel_version(system));
    printf("long os version:      %s\n", sysinfo_system_long_version(system));
    printf("host name:            %s\n", sysinfo_system_host_name(system));
    printf("cpu vendor id:        %s\n", sysinfo_cpu_vendor_id(system));
    printf("cpu brand:            %s\n", sysinfo_cpu_brand(system));
    printf("cpu frequency:        %ld\n", sysinfo_cpu_frequency(system));
    printf("cpu cores:            %d\n", sysinfo_cpu_physical_cores(system));
    printf("total memory:         %ld\n", sysinfo_total_memory(system));
    printf("free memory:          %ld\n", sysinfo_free_memory(system));
    printf("used memory:          %ld\n", sysinfo_used_memory(system));
    printf("total swap:           %ld\n", sysinfo_total_swap(system));
    printf("free swap:            %ld\n", sysinfo_free_swap(system));
    printf("used swap:            %ld\n", sysinfo_used_swap(system));
    printf("networks received:    %ld\n", sysinfo_networks_received(networks));
    printf("networks transmitted: %ld\n", sysinfo_networks_transmitted(networks));
    unsigned int len = 0, i = 0;
    float *procs = NULL;
    sysinfo_cpus_usage(system, &len, &procs);
    while (i < len) {
        printf("CPU #%d usage: %f%%\n", i, procs[i]);
        i += 1;
    }
    free(procs);

    // processes part
    i = 0;
    printf("For a total of %ld processes.\n", sysinfo_processes(system, process_loop, &i));
    check_tasks(system);
    // we can now free the CSystem and the CNetworks objects.
    sysinfo_destroy(system);
    sysinfo_networks_destroy(networks);
    return 0;
}