14 #include <QTextStream>
16 #if defined(Q_OS_FREEBSD) || defined(__DragonFly__)
18 #include <sys/param.h>
19 #include <sys/sysctl.h>
20 #include <sys/resource.h>
24 #include <osreldate.h>
27 #if defined(Q_OS_NETBSD)
28 #include <sys/param.h>
29 #include <sys/sysctl.h>
30 #include <sys/sched.h>
34 #if defined Q_OS_FREEBSD || defined(Q_OS_NETBSD) || defined(__DragonFly__)
36 #define pagetok(size) ((size) << pageshift)
41 #if defined Q_OS_FREEBSD || defined(Q_OS_NETBSD) || defined(__DragonFly__)
43 int pagesize = getpagesize();
45 while (pagesize > 1) {
52 # if (defined(Q_OS_FREEBSD) && __FreeBSD_version < 500018) && !defined(__DragonFly__)
53 connect(&ksp, SIGNAL(receivedStdout(K3Process*,
char*,
int)),
54 this, SLOT(receivedStdout(K3Process*,
char*,
int)));
55 connect(&ksp, SIGNAL(processExited(K3Process*)),
56 this, SLOT(processExited(K3Process*)));
58 swapTotal = swapUsed = 0;
63 # elif defined Q_OS_FREEBSD || defined(__DragonFly__)
64 kd = kvm_open(
"/dev/null",
"/dev/null",
"/dev/null", O_RDONLY,
"kvm_open");
74 #if defined(Q_OS_FREEBSD) || defined(__DragonFly__)
75 void MemSensor::receivedStdout(K3Process *,
char *buffer,
int len)
78 sensorResult += QString(buffer);
81 void MemSensor::receivedStdout(K3Process *,
char *,
int)
85 void MemSensor::processExited(K3Process *)
87 #if defined(Q_OS_FREEBSD) || defined(__DragonFly__)
88 QStringList stringList = sensorResult.split(
'\n');
90 QStringList itemsList = stringList[1].split(
' ');
92 swapUsed = itemsList[2].toInt();
93 swapTotal = itemsList[1].toInt();
99 #if defined Q_OS_FREEBSD || defined(Q_OS_NETBSD) || defined(__DragonFly__)
101 size_t size =
sizeof(mem);
103 sysctlbyname(
"hw.physmem", &mem, &size, NULL, 0);
106 QRegExp rx(
"MemTotal:\\s*(\\d+)");
108 return (rx.cap(1).toInt());
114 #if defined(Q_OS_FREEBSD) || defined(__DragonFly__)
116 size_t size =
sizeof(mem);
118 sysctlbyname(
"vm.stats.vm.v_free_count", &mem, &size, NULL, 0);
119 return (pagetok(mem));
120 #elif defined(Q_OS_NETBSD)
121 struct uvmexp_sysctl uvmexp;
126 ssize =
sizeof(uvmexp);
127 sysctl(mib, 2, &uvmexp, &ssize, NULL, 0);
128 return pagetok(uvmexp.free);
130 QRegExp rx(
"MemFree:\\s*(\\d+)");
132 return (rx.cap(1).toInt());
138 #if defined(Q_OS_FREEBSD) || defined(__DragonFly__)
140 size_t size =
sizeof(mem);
142 sysctlbyname(
"vfs.bufspace", &mem, &size, NULL, 0);
144 #elif defined(Q_OS_NETBSD)
145 static int buf_mem = 0;
146 size_t size =
sizeof(buf_mem);
148 sysctlbyname(
"vm.bufmem", &buf_mem, &size, NULL, 0);
149 return (buf_mem / 1024);
151 QRegExp rx(
"Buffers:\\s*(\\d+)");
153 return (rx.cap(1).toInt());
159 #if defined(Q_OS_FREEBSD) || defined(__DragonFly__)
161 size_t size =
sizeof(mem);
163 sysctlbyname(
"vm.stats.vm.v_cache_count", &mem, &size, NULL, 0);
164 return (pagetok(mem));
165 #elif defined(Q_OS_NETBSD)
168 QRegExp rx1(
"Cached:\\s*(\\d+)");
169 QRegExp rx2(
"SwapCached:\\s*(\\d+)");
170 rx1.indexIn(meminfo);
171 rx2.indexIn(meminfo);
172 return (rx1.cap(1).toInt() + rx2.cap(1).toInt());
179 #if defined(Q_OS_FREEBSD) || defined(__DragonFly__)
180 # if defined(Q_OS_FREEBSD) && __FreeBSD_version < 500018
184 int pagesize = getpagesize();
188 n = kvm_getswapinfo(kd, &swapinfo, 1, 0);
190 if (n < 0 || swapinfo.ksw_total == 0)
193 retavail = swapinfo.ksw_total * pagesize / 1024;
197 #elif defined(Q_OS_NETBSD)
198 struct uvmexp_sysctl uvmexp;
205 ssize =
sizeof(uvmexp);
207 if (sysctl(mib, 2, &uvmexp, &ssize, NULL, 0) != -1) {
208 pagesize = uvmexp.pagesize;
209 STotal = (pagesize * uvmexp.swpages) >> 10;
213 QRegExp rx(
"SwapTotal:\\s*(\\d+)");
215 return (rx.cap(1).toInt());
221 #if defined(Q_OS_FREEBSD) || defined(__DragonFly__)
222 # if defined(Q_OS_FREEBSD) && __FreeBSD_version < 500018
223 return(swapTotal - swapUsed);
226 int pagesize = getpagesize();
230 n = kvm_getswapinfo(kd, &swapinfo, 1, 0);
231 if (n < 0 || swapinfo.ksw_total == 0)
234 retfree = (swapinfo.ksw_total - swapinfo.ksw_used) * pagesize / 1024;
238 #elif defined(Q_OS_NETBSD)
239 struct uvmexp_sysctl uvmexp;
248 ssize =
sizeof(uvmexp);
250 if (sysctl(mib, 2, &uvmexp, &ssize, NULL, 0) != -1) {
251 pagesize = uvmexp.pagesize;
252 STotal = (pagesize * uvmexp.swpages) >> 10;
253 SUsed = (pagesize * uvmexp.swpginuse) >> 10;
254 SFree = STotal - SUsed;
258 QRegExp rx(
"SwapFree:\\s*(\\d+)");
260 return (rx.cap(1).toInt());
264 void MemSensor::readValues()
266 #if defined Q_OS_FREEBSD || defined(Q_OS_NETBSD) || defined(__DragonFly__)
267 # if (defined(Q_OS_FREEBSD) && __FreeBSD_version < 500018) && !defined(__DragonFly__)
268 ksp.clearArguments();
270 ksp.start(K3Process::NotifyOnExit, K3ProcIO::Stdout);
273 QFile file(
"/proc/meminfo");
275 if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
276 QTextStream t(&file);
277 meminfo = t.readAll();
289 #if (defined(Q_OS_FREEBSD) && __FreeBSD_version < 500018)
301 #if (defined(Q_OS_FREEBSD) && __FreeBSD_version < 500018) && !defined(__DragonFly__)
302 if ((!MaxSet) && (totalSwap > 0)) {
309 if (format.length() == 0) {
313 format.replace(QRegExp(
"%fmb", Qt::CaseInsensitive),
314 QString::number((
int)((totalMem - usedMemNoBuffers) / 1024.0 + 0.5)));
315 format.replace(QRegExp(
"%fm", Qt::CaseInsensitive),
316 QString::number((
int)((totalMem - usedMem) / 1024.0 + 0.5)));
318 format.replace(QRegExp(
"%umb", Qt::CaseInsensitive),
319 QString::number((
int)((usedMemNoBuffers) / 1024.0 + 0.5)));
320 format.replace(QRegExp(
"%um", Qt::CaseInsensitive),
321 QString::number((
int)((usedMem) / 1024.0 + 0.5)));
323 format.replace(QRegExp(
"%tm", Qt::CaseInsensitive),
324 QString::number((
int)((totalMem) / 1024.0 + 0.5)));
326 format.replace(QRegExp(
"%fs", Qt::CaseInsensitive),
327 QString::number((
int)((totalSwap - usedSwap) / 1024.0 + 0.5)));
328 format.replace(QRegExp(
"%us", Qt::CaseInsensitive),
329 QString::number((
int)(usedSwap / 1024.0 + 0.5)));
330 format.replace(QRegExp(
"%ts", Qt::CaseInsensitive),
331 QString::number((
int)(totalSwap / 1024.0 + 0.5)));
335 #if (defined(Q_OS_FREEBSD) && __FreeBSD_version < 500018) && !defined(__DragonFly__)
348 if (f.length() == 0) {
351 if (f ==
"%fm" || f ==
"%um" || f ==
"%fmb" || f ==
"%umb")
353 if (f ==
"%fs" || f ==
"%us")
QString getParam(const QString &) const
void setMaxValue(SensorParams *sp)
virtual void setMax(int max)
virtual void setValue(int)
QList< QObject * > * objList