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

603
.
(\/)____o_O____(\/)
Swank, про avg() ты похоже не догнал о чем я спрашивал
.
Сексуальность валенка
Koenig, Не, незнаю я этой функции
.
(\/)____o_O____(\/)
Swank, среднее арифметическое значение считает, просто смотрю в коде с + с1 /2
.
Сексуальность валенка
Koenig, Мне оптимальнее юзать с + с1 /2 чем avg
Да и еще подключать заголовочный файл в котором эта функция
Так быстрее, знаю что это даже не спички но я привык все так делать
.
Swank
Сексуальность валенка
Вот если кому интересно простой пример мониторинга чтоли
#include <stdio.h>
#include <unistd.h>

char cpuUsage();
int memTotal();
int memFree();

int main() {
    while(1) {
        
        printf("CPU: %d%%\nMEM: %d/%d\n", cpuUsage(), memTotal(), memFree());
        fflush(stdout);
        sleep(1);
    }
   return 0;
}


char cpuUsage() {
    char 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;
}

int memTotal() {
 unsigned long memtotal;
    FILE *fp;

fp = fopen("/proc/meminfo", "r");
if (!fp)
return -1;
if(fscanf(fp, "MemTotal:%lu kB\n", &memtotal) != 1) {
        fclose(fp);
        return -1;
}
fclose(fp);
return memtotal / 1024;
}

int memFree() {
int memFree;
    int ignore;
FILE *fp;

fp = fopen("/proc/meminfo", "r");
if (!fp)
return -1;

if(fscanf(fp, "MemTotal:%llu kB\n", &ignore) != 1) {
        fclose(fp);
return -1;
}

if(fscanf(fp, "MemFree:%lu kB\n", &memFree) != 1) {
        fclose(fp);
        return -1;
}
fclose(fp);
return memFree / 1024;
}

Скомпилить можно так:
gcc file.c
Запустить:
chmod +x a.out
./a.out

Можно прописать условие на отправку письма на емаил, если cpuUsage()> 95% or mrmFree() <(memTotal /8)
Отправляем письмо "[server]highload, help me pls"
.
Сексуальность валенка
https://m.habrahabr.ru/post/307706/ Поржал.
А вообще это не смешно, надо руки отрубывать за такое, ноги тоже, да и все что торчит.
.
С газика
# Swank (16.08.2016 / 06:01)
https://m.habrahabr.ru/post/307706/ Поржал.
А вообще это не смешно, надо руки отрубывать за такое, ноги тоже, да и все что торчит.
Развлекаеца человек, а такото из разряда - коту делать нечего...
.
Сексуальность валенка
клоун, Не в том дело, знать как работает компилятор полезно но его первое же утверждение "вы можете изменить порядок аргументов функции в C", в корне не верно, в Си нельзя изменить порядок аргументов, тут используется неопределенное поведение компилятора.
Работать оно может будет "правильно" только в том солучае если инт и дабл будут передаватся через разные стеки(инт через основной, а дабл через стек fpu), также от согласования вызовов ещё зависит, например если у функции согласование fastcall и регистр способен вместить дабл то будет через регистры передаватся.
.
С газика
# Swank (18.08.2016 / 00:23)
клоун, Не в том дело, знать как работает компилятор полезно но его первое же утверждение "вы можете изменить порядок аргументов функции в C", в корне не верно, в Си нельзя изменить порядок аргументов
Ну я примерно это и имел ввиду, и то что дятел не понимает что приведение указателя на одну функцию, к указателю на другую не влияет на аргументы и их передачу, как бы очевидно
Всего: 19