рдЖрдкрдХрд╛ рд╕рд┐рд╕реНрдЯрдо рдореЙрдирд┐рдЯрд░ (рд▓рд┐рдирдХреНрд╕) рд▓рд┐рдЦрдирд╛

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдЖрдкрдХреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕рд┐рд╕реНрдЯрдо рдореЙрдирд┐рдЯрд░ рдмрдирд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдБрдЧрд╛ред рдпрд╣ рд╕рд┐рд╕реНрдЯрдо рдореЙрдирд┐рдЯрд░ рджрд┐рдЦрд╛рддрд╛ рд╣реИ:

рдпрджрд┐ рдХреЛрдИ рдкреЗрдирд▓реНтАНрдЯ рдкреЙрдЗрдВрдЯ рдореЗрдВ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИ рдХрд┐ рдХреИрд╢реНрдб рдбреЗрдЯрд╛ рдХреЗ рдмрд┐рдирд╛ рдЗрд╕рдХрд╛ рдХреНтАНрдпрд╛ рдЕрд░реНрде рд╣реИ, рддреЛ рдЗрд╕реЗ рдкрдврд╝реЗрдВ, рдпрд╣ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдЕрд░реНрде рдХреНтАНрдпрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЗрд╕ рдкреНрд░рдгрд╛рд▓реА рдХреА рдирд┐рдЧрд░рд╛рдиреА рдореЗрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдирддреАрдЬрддрди, рд╣рдореЗрдВ рдРрд╕реА рдкреНрд░рдгрд╛рд▓реА рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП:
рдЫрд╡рд┐рдЫрд╡рд┐
рдЕрдм рдЗрд╕рдХреА рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдореИрдВ рдХреЛрдб рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдореИрдВ рдЖрдкрдХреЛ рддреБрд░рдВрдд рдЪреЗрддрд╛рд╡рдиреА рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдХреЛрдб рдХреЗрд╡рд▓ рд▓рд┐рдирдХреНрд╕ рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреА рд▓рдЧрднрдЧ рд╕рднреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ / рдЦрд░реАрдж рдлреЛрд▓реНрдбрд░ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИрдВред рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд╕рд┐рд╕реНрдЯрдо рдореЙрдирд┐рдЯрд░ рдХреЛ рддреАрди рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рдкреНрд░рдердо рд╢реНрд░реЗрдгреА рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рд╕рд┐рд╕реНрдЯрдо рдЬрд╛рдирдХрд╛рд░реА рд▓рд╛рдЧреВ рдХреА рдЬрд╛рддреА рд╣реИ, рджреВрд╕рд░реА рдХрдХреНрд╖рд╛ рдореЗрдВ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рддрд╛рд▓рд┐рдХрд╛, рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рдФрд░ рддреАрд╕рд░реА рдХрдХреНрд╖рд╛ рдЗрд╕реЗ рдПрдХ рдкреВрд░реЗ рдореЗрдВ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░реЗрдЧреАред рдпрд╣рд╛рдБ рдкреНрд░рдердо рд╢реНрд░реЗрдгреА рдХреА рд░реВрдкрд░реЗрдЦрд╛ рд╣реИ, рдореИрдВрдиреЗ рдЗрд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рдХрд╣рд╛:
#ifndef INFO_H #define INFO_H #include <QtGui> #include <iostream> #include <fstream> #include <pwd.h> #include <unistd.h> #include <sys/sysinfo.h> #include <vector> using namespace std; class Info : public QWidget { Q_OBJECT public: explicit Info(QWidget *parent = 0); private: QLabel * hostname; QLabel * user; QLabel * uptime; QLabel * proc; QLabel * freq; QLabel * cpuload; QLabel * mem; QLabel * memload; QProgressBar * cpubar; QProgressBar * membar; QVBoxLayout * layout; QHBoxLayout * hlayout; vector<float> readCpuStats(); int getCpuLoad(double dt); public slots: void update(); }; #endif // INFO_H 

рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ pwd.h рдФрд░ unistd.h рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓ sys / sysinfo.h рдЕрдкрдЯрд╛рдЗрдо рдХреЗ рд▓рд┐рдПред рдЕрдм рдореИрдВ рдЬрд╛рдирдХрд╛рд░реА рд╡рд░реНрдЧ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛, рдпрд╣ info.cpp рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИред Info.cpp рдлрд╝рд╛рдЗрд▓ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ, рд╣рдореЗрдВ info.h (рдЬрд╛рдирдХрд╛рд░реА рд╡рд░реНрдЧ рдХреА рд░реВрдкрд░реЗрдЦрд╛) рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЬрд╛рдирдХрд╛рд░реА рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдорд╛рддрд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
 Info::Info(QWidget *parent) : QWidget(parent) { hostname = new QLabel("Hostname: "); user = new QLabel(": "); uptime = new QLabel("Uptime: "); proc = new QLabel(": "); freq = new QLabel(":"); cpuload = new QLabel(" : "); mem = new QLabel(" : "); memload = new QLabel("  : "); cpubar = new QProgressBar; membar = new QProgressBar; layout = new QVBoxLayout; hlayout = new QHBoxLayout; cpubar->setMaximumHeight(21); membar->setMaximumHeight(21); hlayout->addWidget(cpuload); hlayout->addWidget(cpubar); layout->addWidget(hostname); layout->addWidget(user); layout->addWidget(uptime); layout->addWidget(proc); layout->addWidget(freq); layout->addLayout(hlayout); layout->addWidget(mem); layout->addWidget(memload); layout->addWidget(membar); setLayout(layout); update(); QTimer *timer = new QTimer; connect(timer, SIGNAL(timeout()), this, SLOT(update())); timer->start(2000); } 

рдмрд╣реБрдд рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╣рдо рд╕рднреА рдЧреНрд░рд╛рдлрд┐рдХ рддрддреНрд╡реЛрдВ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддреЗ рд╣реИрдВред рдЕрдЧрд▓рд╛ рдЪрд░рдг рд▓реЗрдЖрдЙрдЯ рдореЗрдВ рдЧреНрд░рд╛рдлрд┐рдХ рддрддреНрд╡реЛрдВ рдХреА рд╡реНрдпрд╡рд╕реНрдерд╛ рдХрд░ рд░рд╣рд╛ рд╣реИред рд╣рдо рдЕрдкрдбреЗрдЯ рд╕реНрд▓реЙрдЯ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рддрд╛рдХрд┐ рд╕рднреА рд▓реЗрдмрд▓ рдФрд░ рдкреНрд░рдЧрддрд┐ рдмрд╛рд░ рдорд╛рдиреЛрдВ рд╕реЗ рднрд░ рдЬрд╛рдПрдВред рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрдбреЗрдЯ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП, рд╣рдо рдХреНрдпреВрдЯреАрдорд░ рдХреНрд▓рд╛рд╕ рдХрд╛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕рдХреЗ рдЯрд╛рдЗрдордЖрдЙрдЯ рд╕рд┐рдЧреНрдирд▓ рдХреЛ рдЙрд╕ рдЕрдкрдбреЗрдЯ рд╕реНрд▓реЙрдЯ рд╕реЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рдЬрд╛рдирддреЗ рд╣реИрдВред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрджреНрдпрддрди рд╕реНрд▓реЙрдЯ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рддрд░реНрдХрд╕рдВрдЧрдд рд╣реЛрдЧрд╛, рдпрд╣рд╛рдБ рдЗрд╕рдХрд╛ рдХреЛрдб рд╣реИ:
 void Info::update() { ifstream stream("/proc/sys/kernel/hostname"); string str; getline(stream,str); hostname->setText("Hostname: " + QString::fromStdString(str)); uid_t uid = geteuid(); passwd *pw = getpwuid(uid); user->setText(": " + QString::fromAscii(pw->pw_name)); struct sysinfo o; sysinfo(&o); long up = o.uptime; int hour = up/60/60; int min = (up - hour*60*60) / 60; int sec = ((up - hour*60*60) - min*60); QString e = QString::number(hour) + QString(" h. ") + QString::number(min) + QString(" m. ") + QString::number(sec) + QString(" s."); uptime->setText("Uptime: " + e); stream.close(); stream.open("/proc/cpuinfo"); for(int i = 0; i < 16;i++) stream >> str; getline(stream,str); proc->setText(": " + QString::fromStdString(str)); for(int i = 0; i< 7; i++) stream >> str; freq->setText(": " + QString::fromStdString(str) + " MHz"); cpubar->setValue(getCpuLoad(0.3)); stream.close(); stream.open("/proc/meminfo"); stream >> str; stream >> str; int num = atoi(str.c_str()); int percent = num / 100; int gb = (num / 1024) / 1024; int mb = (num-gb*1024*1024) /1024; int kb = (num - (gb*1024*1024+mb*1024)); if (gb > 0) e = QString::number(gb) + QString(" Gb "); else e = QString(""); if (mb > 0) e += QString::number(mb) + QString(" Mb "); if (kb > 0) e += QString::number(kb) + QString(" Kb "); mem->setText(" : " + e); int free = 0; for (int i = 0 ; i < 3 ; i++) { stream >> str; stream >> str; stream >> str; free += atoi(str.c_str()); } num -= free; gb = num / 1024 / 1024; mb = (num - gb*1024*1024) / 1024; kb = (num - ((mb*1024) + (gb * 1024 * 1024))); if (gb > 0) e = QString::number(gb) + QString(" Gb "); else e = QString(""); if (mb > 0) e += QString::number(mb) + QString(" Mb "); if (kb > 0) e += QString::number(kb) + QString(" Kb "); memload->setText("  : " + e); percent = num / percent; membar->setValue(percent); } 

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЛрд▓рддреЗ рд╣реИрдВ (рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рд╕реБрдкрд░рдпреВрд╕рд░ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ) рдлрд╝рд╛рдЗрд▓ / proc / sys / рдХрд░реНрдиреЗрд▓ / рд╣реЛрд╕реНрдЯрдирд╛рдо рдФрд░ рдорд╢реАрди рдХрд╛ рдирд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рд╣рдо hostname рд▓реЗрдмрд▓ рдореЗрдВ рднрд░рддреЗ рд╣реИрдВред рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рд╣рдо passwd рдФрд░ uid_t рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬрд┐рдирдХреА рдорджрдж рд╕реЗ рд╣рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд▓реЗрдмрд▓ рдореЗрдВ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдорд┐рд▓рддрд╛ рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдХреИрд╕реЗ рдкрддрд╛ рдХрд░реЗрдВ, рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА whoami рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рд╕реЗ рд▓реА рдЧрдИ рдереАред рдлрд┐рд░ рд╣рдо рд╕рд┐рд╕рд┐рдиреЛрдлреЛ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдореВрд▓реНрдпреЛрдВ рдХреЛ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рднрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рд╣рдо рд╕рд┐рд╕реНрдЯрдо рдЕрдкрдЯрд╛рдЗрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд▓реЗрддреЗ рд╣реИрдВред рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдлрд╝рд╛рдЗрд▓ / proc / cpuinfo рдХреЗ рд╕рд╛рде рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрдирд╛рдИ рдЧрдИ рд╕реНрдЯреНрд░реАрдо рд╕реНрдЯреНрд░реАрдо рдХреЛ рд▓рд┐рдВрдХ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдкреНрд░реЛрд╕реЗрд╕рд░ рдореЙрдбрд▓ рдХреЗ рдирд╛рдо рдФрд░ рдЗрд╕рдХреА рдЖрд╡реГрддреНрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкрд╛рддреЗ рд╣реИрдВред рд╣рдореЗрдВ getCpuLoad рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░реЛрд╕реЗрд╕рд░ рд▓реЛрдб рдорд┐рд▓рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдореИрдВ рдиреАрдЪреЗ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ред рдЕрдм рд╣рдо рдлрд╛рдЗрд▓ / proc / meminfo рдХреЗ рд╕рд╛рде рд╕реНрдЯреНрд░реАрдо рд╕реНрдЯреНрд░реАрдо рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рд╣рдо RAM рдХреА рдорд╛рддреНрд░рд╛ рд▓реЗрддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕реЗ рдПрдХ рдкрдардиреАрдп рд░реВрдк рдореЗрдВ рд▓рд╛рддреЗ рд╣реИрдВред рдлрд┐рд░ рдЙрд╕реА рдлрд╝рд╛рдЗрд▓ рд╕реЗ рд╣рдореЗрдВ рдореБрдлреНрдд рд░реИрдо рдХреА рдорд╛рддреНрд░рд╛, рд╕рд╛рде рд╣реА рдХреИрд╢реНрдб рдбреЗрдЯрд╛ рдХреА рдорд╛рддреНрд░рд╛ рдорд┐рд▓рддреА рд╣реИред рдХрдмреНрдЬреЗ рд╡рд╛рд▓реА рд░реИрдо рдХреА рдорд╛рддреНрд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕рднреА рд░реИрдо рд╕реЗ рдлреНрд░реА рд░реИрдо рдФрд░ рдХреИрд╢реНрдб рдбреЗрдЯрд╛ рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рдШрдЯрд╛рддреЗ рд╣реИрдВ, рдлрд┐рд░ рд╣рдо рдЗрд╕реЗ рдПрдХ рдкрдардиреАрдп рд░реВрдк рдореЗрдВ рд▓рд╛рддреЗ рд╣реИрдВред рдЕрдм, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдКрдкрд░ рд╡рд╛рджрд╛ рдХрд┐рдпрд╛ рдерд╛, getCpuLoad рдлрд╝рдВрдХреНрд╢рди рд╡рд┐рд╡рд░рдгред рдореИрдВрдиреЗ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдЦреБрдж рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рдерд╛ (рдореИрдВрдиреЗ рдЗрд╕реЗ рдпрд╣рд╛рдВ рд╕реЗ рд▓рд┐рдпрд╛ рд╣реИ ), рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕рдХрд╛ рдмрд╣реБрдд рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рдирд╣реАрдВ рджреЗ рд╕рдХрддрд╛, рдореИрдВ рдЗрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рд╢рдмреНрджреЛрдВ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд░реВрдВрдЧрд╛ред рдпрд╣рд╛рдБ рдпрд╣ рд╣реИ:
 int Info::getCpuLoad(double dt) { vector<float> stats1 = readCpuStats(); QProcess::execute("sleep",QStringList() << QString::number(dt)); vector<float> stats2 = readCpuStats(); int size1 = stats1.size(); int size2 = stats2.size(); if (!size1 || !size2 || size1 != size2) return 2; for (int i = 0; i < size1; ++i) stats2[i] -= stats1[i]; int sum = 1; for (int i = 0; i < size1; ++i) sum += stats2[i]; int load = 100 - (stats2[size2 - 1] * 100 / sum); return load; } 

рджреЛ рдмрд╛рд░ рд╣рдореЗрдВ readCpuStats рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рддреАрди рдорд╛рди рдорд┐рд▓рддреЗ рд╣реИрдВ (рдореИрдВ рдЗрд╕реЗ рдиреАрдЪреЗ рднреА рд╡рд░реНрдгрд┐рдд рдХрд░реВрдВрдЧрд╛), рд▓реЗрдХрд┐рди рд╣рдо рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдордп рдЕрдВрддрд░рд╛рд▓ рдХреЗ рд╕рд╛рде рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрд╣рддреЗ рд╣реИрдВред рдкреНрд░реЛрд╕реЗрд╕рд░ рд▓реЛрдб рдХреА рдЧрдгрдирд╛ рдЗрди рдореВрд▓реНрдпреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреА рдЬрд╛рддреА рд╣реИред рдФрд░ рдЕрдм readCpuStats рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╡рд░реНрдгрди:
 vector<float> Info::readCpuStats() { vector<float> ret; ifstream stat_file("/proc/stat"); if (!stat_file.is_open()) { cout << "Unable to open /proc/stat" << std::endl; return ret; } int val; string tmp; stat_file >> tmp; for (int i = 0; i < 4; ++i) { stat_file >> val; ret.push_back(val); } stat_file.close(); return ret; } 

рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдЙрд╕реА рд╕рд╛рдЗрдЯ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬреИрд╕реЗ getCpuLoad рдлрд╝рдВрдХреНрд╢рдиред рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ, рд╣рдо рдлрд╝рд╛рдЗрд▓ / proc / рд╕реНрдЯреЗрдЯ рд╕реЗ рдорд╛рдиреЛрдВ рдХреЛ рдкрдврд╝рддреЗ рд╣реИрдВ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╡реЗрдХреНрдЯрд░ рдореЗрдВ рджрд░реНрдЬ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рд╣рдо рдлрд┐рд░ рд░рд┐рдЯрд░реНрди рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЗ рд╕рд╛рде рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВред
рдЕрдм рдЗрдиреНрдлреЛ рдХреНрд▓рд╛рд╕ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЖрдк рдкреНрд░реЛрд╕реЗрд╕рдЯреЗрдмрд▓ рдХреНрд▓рд╛рд╕ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рдЗрд╕ рд╡рд░реНрдЧ рдХреА рд░реВрдкрд░реЗрдЦрд╛ рд╣реИ:
 #ifndef PROCESSTABLE_H #define PROCESSTABLE_H #include <QtGui> #include <iostream> #include <fstream> using namespace std; class ProcessTable : public QWidget { Q_OBJECT public: explicit ProcessTable(QWidget *parent = 0); private: QTableWidget * table; QHBoxLayout* hlayout; QPushButton* button; QVBoxLayout* layout; public slots: void update(); void kill(); }; #endif // PROCESSTABLE_H 

рдЕрдкрдбреЗрдЯ рд╕реНрд▓реЙрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЯреЗрдмрд▓ рдХреЛ рдкреЙрдкреНрдпреБрд▓реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд▓ рд╕реНрд▓реЙрдЯ рдХреЛред рдЗрд╕ рд╡рд░реНрдЧ рдХреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рд╣рдореЗрдВ рдкрд╣рд▓реЗ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЙрд╕рдХреЗ рдХрдВрдХрд╛рд▓ рдХреЗ рд╕рд╛рде рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдм рдореИрдВ рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреА рдУрд░ рдореБрдбрд╝рддрд╛ рд╣реВрдВ, рдпрд╣рд╛рдВ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛрдб рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
 ProcessTable::ProcessTable(QWidget *parent) : QWidget(parent) { hlayout = new QHBoxLayout; button = new QPushButton(""); button->setToolTip("       PID     \"\""); connect(button,SIGNAL(clicked()),this,SLOT(kill())); hlayout->addStretch(); hlayout->addWidget(button); layout = new QVBoxLayout; table = new QTableWidget; update(); layout->addWidget(table); layout->addLayout(hlayout); this->setLayout(layout); QTimer *timer = new QTimer; connect(timer, SIGNAL(timeout()), this, SLOT(update())); timer->start(4000); } 

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдЧреНрд░рд╛рдлрд┐рдХ рддрддреНрд╡реЛрдВ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХрдВрдкреЛрдЬрд╝ рдХрд░рддреЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА "рдлрд┐рдирд┐рд╢" рдмрдЯрди рд╕реЗ рдХреНрд▓рд┐рдХ рдХрд┐рдП рдЧрдП рд╕рд┐рдЧреНрдирд▓ рдХреЛ рд╣рдорд╛рд░реА рдХреНрд▓рд╛рд╕ - рдХрд┐рд▓ рдХреЗ рд╕реНрд▓реЙрдЯ рд╕реЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рд╣рдо рдЯреЗрдмрд▓ рдХреЛ рдЖрдмрд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдбреЗрдЯ рд╕реНрд▓реЙрдЯ рднреА рдХрд╣рддреЗ рд╣реИрдВ, рдФрд░ рдЯрд╛рдЗрдорд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯреЗрдмрд▓ рдХреЗ рдЕрдкрдбреЗрдЯ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред рдЕрдм рдЕрджреНрдпрддрди рд╕реНрд▓реЙрдЯ рдХрд╛ рд╡рд┐рд╡рд░рдг, рдпрд╣рд╛рдБ рдЗрд╕рдХрд╛ рдХреЛрдб рд╣реИ:
 void ProcessTable::update() { table->setColumnCount(2); table->setRowCount(0); QStringList list; list << "Name" << "PID"; table->setHorizontalHeaderLabels(list); QDir * dir = new QDir("/proc"); list = dir->entryList(QStringList("*"),QDir::AllDirs); foreach(QString str, list) { if(str.toInt()) { ifstream stream; stream.open("/proc/" + str.toAscii() + "/comm"); string s; getline(stream,s); int lastRow = table->rowCount(); QString icon = "/usr/share/icons/hicolor/32x32/apps/" + QString::fromStdString(s) + ".png"; QFile file(icon); table->insertRow(lastRow); table->setColumnWidth(0,150); if(!file.exists()) { icon = ":/binary.png"; } table->setItem(lastRow,0,new QTableWidgetItem(QPixmap(icon),QString::fromStdString(s))); table->setItem(lastRow,1,new QTableWidgetItem(str)); } else { continue; } } } 

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд╕рд╛рде рд╕реНрддрдВрднреЛрдВ рдФрд░ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛, рд╕рд╛рде рд╣реА рд╕реНрддрдВрднреЛрдВ рдХреЗ рдирд╛рдо рднреА рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рддрдм рд╣рдореЗрдВ / proc рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдорд┐рд▓рддреА рд╣реИред рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдкреВрд░реА рд╕реВрдЪреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реВрдк рдХрд░рддреЗ рд╣реИрдВ, рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ рдЬреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИрдВред рд╣рдореЗрдВ рдлрд╝рд╛рдЗрд▓ / proc / pid / comm рд╕реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдирд╛рдо рдорд┐рд▓рддрд╛ рд╣реИред рд╣рдо рдЖрдЗрдХрди рдХреЛ рдлреЛрд▓реНрдбрд░ / usr / share / icons / hicolor / 32x32 / apps рд╕реЗ рд▓реЗрддреЗ рд╣реИрдВ, рдФрд░ рдпрджрд┐ рдЖрдЗрдХрди рдирд╣реАрдВ рд╣реИ, рддреЛ рдмрд╛рдЗрдирд░реА рдореЗрдВ рдмрд╛рдЗрдирд░реА.рдкрд┐рдВрдЧ рдЪрд┐рддреНрд░ рд╕рд┐рд▓рдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпреЗ рд░рд╣реА рддрд╕реНрд╡реАрд░:
рдЫрд╡рд┐
рд╕реНрд░реЛрдд рдореЗрдВ рдЗрд╕реЗ рд╕реАрд╡реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЖрд░рд╕реАрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдЖрдк рдореИрдХреНрд╕ рд╢реЗрд▓реА рдХреА рдкреБрд╕реНрддрдХ "рдХреНрдпреВрдЯреА - рдкреНрд░реЛрдлреЗрд╢рдирд▓ рд╕реА ++ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ" рдореЗрдВ рдЖрд░рд╕реАрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдЖрдк рдЗрд╕реЗ рдЧреВрдЧрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрд░рд╕реАрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдореИрдирд╛ рд╣реИрдВред
рдЕрдм рдХрд┐рд▓ рд╕реНрд▓реЙрдЯ рдХреЗ рд╡рд┐рд╡рд░рдг рдкрд░ рдЬрд╛рдПрдВ, рдпрд╣рд╛рдВ рдЗрд╕рдХрд╛ рдХреЛрдб рд╣реИ:
 void ProcessTable::kill() { QList<QTableWidgetItem*> list = table->selectedItems(); QTableWidgetItem* item = list.value(0); QString str = item->text(); QProcess::execute("kill", QStringList() << str); update(); } 

рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЙрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рд╕рднреА рд▓рд┐рдирдХреНрд╕ рдореЗрдВ рд╣реИ (рдпрджрд┐ рдЖрдкрдХреЗ рд▓рд┐рдирдХреНрд╕ рдореЗрдВ рдпрд╣ рдирд╣реАрдВ рд╣реИ, рддреЛ рдореИрдВ рдпрд╣ рднреА рдХрд▓реНрдкрдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдХрд┐ рдпрд╣ рдХрд┐рд╕ рддрд░рд╣ рдХрд╛ рд▓рд┐рдирдХреНрд╕ рд╣реИ), рдореИрдВ рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП QProcess рд╡рд░реНрдЧ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рджреВрд╕рд░рд╛ рддрд░реНрдХ рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рд▓рд┐рдП, рдореИрдВ рдкреВрд░реА рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдХреЗрд╡рд▓ PID рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ, рдЗрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдореИрдВ рдЯреЗрдмрд▓ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реВрдВ рддрд╛рдХрд┐ рдкреВрд░реА рдХреА рдЧрдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЗрд╕рд╕реЗ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рдПред рдЕрдм рдореИрдВ SystemMonitor рд╡рд░реНрдЧ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреА рдУрд░ рдореБрдбрд╝рддрд╛ рд╣реВрдВ, рдЬрд┐рд╕рдореЗрдВ рдореИрдВ рджреЛ рд╡рд░реНрдЧреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВред рдЗрд╕ рд╡рд░реНрдЧ рдХрд╛ рдврд╛рдВрдЪрд╛ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ:
 #ifndef SYSTEMMONITOR_H #define SYSTEMMONITOR_H #include <QtGui> #include "info.h" #include "processtable.h" class SystemMonitor : public QWidget { Q_OBJECT public: explicit SystemMonitor(QWidget *parent = 0); }; #endif // SYSTEMMONITOR_H 

рдЦреИрд░, рдЗрд╕ рд╡рд░реНрдЧ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рд╡рд┐рдзрд┐ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЕрдм рдЗрд╕рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ред рдпрд╣рд╛рдБ рдЗрд╕ рдирд┐рд░реНрдорд╛рдг рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд╣реИ (рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдПрдХ рд╡рд╛рдпрд░рдлреНрд░реЗрдо рдлрд╝рд╛рдЗрд▓ рдХрдиреЗрдХреНрд╢рди рдЬреЛрдбрд╝реЗрдВ):
 SystemMonitor::SystemMonitor(QWidget *parent) : QWidget(parent) { QTabWidget * tab = new QTabWidget; Info* info = new Info; ProcessTable* pt = new ProcessTable; tab->addTab(info,"  "); tab->addTab(pt,""); QVBoxLayout * layout = new QVBoxLayout; layout->addWidget(tab); this->setLayout(layout); this->show(); } 

рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ, рд╣рдо рдмрд╕ рдПрдХ рдЯреИрдм рд╡рд┐рдЬреЗрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ, рдФрд░ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реЗ рд╡рд┐рдЬреЗрдЯ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдФрд░ рдЯреЗрдмрд▓ рдХреЗ рд╕рд╛рде рд╡рд┐рдЬреЗрдЯ, рдХреНрдпреЛрдВрдХрд┐ рдРрдбрдЯреИрдм рд╡рд┐рдзрд┐ рд╡рд┐рдЬреЗрдЯ рдХреЛ рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреА рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ QWidget рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рдФрд░ рдкреНрд░реЛрд╕реЗрд╕рдЯреЗрдмрд▓ рдХрдХреНрд╖рд╛рдПрдВ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рд╣реИрдВред рдФрд░ рдЕрдм рдЕрдВрддрд┐рдо рд╕реНрдкрд░реНрд╢, рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛ рд╢реБрд░реБрдЖрддреА рдмрд┐рдВрджреБ, рдЬреЛ рдХрд┐ рдореБрдЦреНрдп рд╣реИред рдлрд╛рдЗрд▓ред рдпрд╣рд╛рдБ рдЙрд╕рдХрд╛ рдХреЛрдб рд╣реИ:
 #include "systemmonitor.h" int main(int argc,char** argv) { QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8")); QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8")); QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8")); QApplication app(argc,argv); QStyle * style = QStyleFactory::create("Cleanlooks"); app.setStyle(style); SystemMonitor sys; return app.exec(); } 

рдкрд╣рд▓реЗ рддреАрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рд░реВрд╕реА рдкрддреНрд░ рдмрдирд╛рддреЗ рд╣реИрдВред рд▓рд╛рдЗрдиреЗрдВ 8 рдФрд░ 9 рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреА рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░рд╛ рдЖрд╡реЗрджрди рдХрд┐рд╕реА рднреА рд╕рд┐рд╕реНрдЯрдо рдкрд░ рд╕рдорд╛рди рд╣реЛрдЧрд╛ред
рдЦреИрд░, рдпрд╣ рддреЛ рд╣реИ, рд╕рд┐рд╕реНрдЯрдо рдореЙрдирд┐рдЯрд░ рдЕрднреА рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИ!


Source: https://habr.com/ru/post/In186944/


All Articles