Решил создать темку для вопросов.
В данный момент я хочу написать низкоуровненую программу(типо 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;
}
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
или в си не так как в пыхе и яве?
Присваивается там все, fscanf() же
# adust (28.04.2015 / 08:38)
там я чет не увидел чтоб ты присваивал значение какоето кроме нуля переменым c, n, s, i
или в си не так как в пыхе и яве?
Вот в этой строке присвоение
fscanf(f, "cpu %lu %lu %lu %lu", &c, &n, &s, &i)