Как я могу получить статистику в Linux? - PullRequest
0 голосов
/ 21 февраля 2019

Я работаю в Linux и C, и я пытаюсь получить конкретные значения из stat/proc когда я делаю stat, я получаю несколько возвращенных значений.

Теперь я пытаюсь сделать это, как показано ниже:

thisFile = fopen("/proc/stat","r");

и распечатать отдельного пользователя, систему иРежим ожидания, чтобы при I printf их можно было печатать, как показано ниже.

User Mode: 12189
System Mode: 5190
Idle Mode: 443

Как бы получить отдельные значения для режима пользователя, системы и режима ожидания?Является ли это возможным??Заранее благодарю за помощь.

1 Ответ

0 голосов
/ 21 февраля 2019

Согласно man 5 proc , первые четыре поля в строке cpu /proc/stat являются

user (1) Время, проведенное в режиме пользователя.
nice (2) Время, проведенное в режиме пользователя с низким приоритетом (nice).
system (3) Время, проведенное в режиме system.
idle (4) Время, проведенное в задаче бездействия.

Таким образом, одной из возможностей было бы прочитать этот файл построчно в буфер с помощью fgets () , а затем использовать sscanf () для анализарелевантная cpu строка:

char buf[2048];

while (fgets(buf, sizeof(buf), thisfile) != NULL) {
    // search for the line with "cpu "
    if (strncmp(buf, "cpu ", 4) == 0) {
        unsigned long long user;
        unsigned long long nice;
        unsigned long long system;
        unsigned long long idle;
        // extract four space separated integer values from what comes after "cpu "
        if (sscanf(buf, "cpu %llu %llu %llu %llu", &user, &nice, &system, &idle) != 4)
            // if the return value is not 4
            // there is an error, handle it

        // user, nice, system and idle variables now hold the desired values
        // print them or do whatever you like
    }
}

Этот ответ реализует то, что было предложено уже в комментариях ранее.

...