Fieberthermometer

Smartprobe-Server

Die Bereitstellung der Meßdaten erfolgt über einen multithreaded Server, der auf einem definierten Socket auf Kommunikation wartet. Die zur Verfügung stehenden Kommandos haben wir ja weiter oben kurz angesprochen. Im Prinzip wartet der Server darauf, daß ein Client entsprechende Kommandos sendet und gegebenenfalls gleich die passenden Parameter mitliefert. Das Kommando GET_ALL führt beispielsweise dazu, alle vorgesehenen Meßwerte festzustellen und diese als Ascii-Pakete zum Client zu schicken.

Wie kommt der maschinenabhängige Teil zu den aktuellen Systemwerten? Leider existiert kein Standardverfahren, wie man an zentrale Systemdaten wie die Systemauslastung herankommen kann. Zwar existieren unter Unix in der Regel typische Systemkommandos wie ps oder uptime, doch geben diese nicht über alle Werte Auskunft. Deshalb wurde auf deren Gebrauch verzichtet. Ein Tool wie Top paßte demgegenüber bestens zur gestellten Aufgabe.

Der Linux-spezifische Code zeigt sehr deutlich, wie leicht das /proc-Dateisystem zu nutzen ist. Hier ein Auszug zur Verdeutlichung:

/* get load averages */

{

fd = open("loadavg", O_RDONLY);

len = read(fd, buffer, sizeof(buffer)-1);

close(fd);

buffer[len] = ‘\0’;

info->load_avg[0] = strtod(buffer, &p);

info->load_avg[1] = strtod(p, &p);

info->load_avg[2] = strtod(p, &p);

p = skip_token(p); /* skip running/tasks */

p = skip_ws(p);

if (*p)

info->last_pid = atoi(p);

else

info->last_pid = -1;

}

Man greift in diesem Fall also auf die derzeitigen Systemload-Daten zu, indem man den Inhalt der virtuellen Datei loadavg einliest und auswertet. Die nachfolgenden Zugriffe aus stat und meminfo (Listing /proc liefert Systemdaten) offenbaren, wie man an weitere Daten herankommt. Die Solaris-Variante ist etwas komplexer, unterstützt aber Multiprozessorumgebungen direkt.