Вопросы по C(си)

472
.
Сексуальность валенка
Решил создать темку для вопросов.
В данный момент я хочу написать низкоуровненую программу(типо recovery в андроиде)
Рисовать уже научился, теперь встал вопрос как определить разрешение экрана?(рисую на sdl если что)
В гугле можно найти только для c++, а я пишу на си, не люблю я почему-то си++, мне си легче и красивее
.
Сексуальность валенка
Есть ли тут люди знающие хорошо низкоуровенные части операционной системы, си, также умеющие работать на низком уровне с графикой и знающие железо?
Есть куча вопросов но не знаю кто бы мог бы мне на них ответить
.
Сексуальность валенка
Надо вычислить нагрузку в процентах на cpu, юзаю для этого procfs но чет не пашет у меня(постоянно 0 возвращает).
Что не так с формулой?
int cpuUsage() {
    int load = 0;
    unsigned long total, c, n, s, i = 0;
    unsigned long c1, n1, s1, i1 = 0; 

    FILE *f = fopen("/proc/stat", "r");
    if (fscanf(f, "cpu %lu %lu %lu %lu", &c, &n, &s, &i) < 4) {
        fclose(f);
        return -1;
    }
    fclose(f);
    usleep(300);
    f = fopen("/proc/stat", "r");
    if (fscanf(f, "cpu %lu %lu %lu %lu", &c1, &n1, &s1, &i1) < 4) {
        fclose(f);
        return -1;
    }
    fclose(f);

    c = (c + c1)/2;
    n = (n + n1)/2;
    s = (s + s1)/2;
    i = (i + i1)/2;

    total = c + n + s + i;
    load =  100 * ((c + n + s)/total);
    return load;
}
.
(\/)____o_O____(\/)
Swank, в сях нет такой штуки как avg?
.
Сексуальность валенка
Koenig, Хз, с /proc/stat проще простого получить инфу, ток чет у меня не правильно считает, формула не правильная
.
Сексуальность валенка
С stat я получаю 4 числа нагрузки
----
user: normal processes executing in user mode
nice: niced processes executing in user mode
system: processes executing in kernel mode
idle: twiddling thumbs
----
Вот из этих чисел надо и вычеслить нагрузку
.
Сексуальность валенка
Вот так вот все заработало
int cpuUsage() {
    double load = 0;
    unsigned long total, c, n, s, i = 0;
    unsigned long c1, n1, s1, i1 = 0; 

    FILE *f = fopen("/proc/stat", "r");
    if (fscanf(f, "cpu %lu %lu %lu %lu", &c, &n, &s, &i) < 4) {
        fclose(f);
        return -1;
    }
    fclose(f);
    sleep(1);
    f = fopen("/proc/stat", "r");
    if (fscanf(f, "cpu %lu %lu %lu %lu", &c1, &n1, &s1, &i1) < 4) {
        fclose(f);
        return -1;
    }
    fclose(f);

    c = c1-c;
    n = n1 -n;
    s = s1 -s;
    i = i1 - i;

    total = c + n + s + i;
    load =  100.0 * ((c + n + s)/(double)total);
    return load;
}
.
там я чет не увидел чтоб ты присваивал значение какоето кроме нуля переменым c, n, s, i
или в си не так как в пыхе и яве?
.
Think different
Присваивается там все, fscanf() же
.
Сексуальность валенка
# adust (28.04.2015 / 08:38)
там я чет не увидел чтоб ты присваивал значение какоето кроме нуля переменым c, n, s, i
или в си не так как в пыхе и яве?
Вот в этой строке присвоение
fscanf(f, "cpu %lu %lu %lu %lu", &c, &n, &s, &i)
Всего: 19