05.11.2013 Aufrufe

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

5.2 Iterative Server 263<br />

ggf. seinen beendeten Kindprozessen) verbrauchte CPU-Zeit in Erfahrung gebracht<br />

werden kann.<br />

1 #include <br />

2 #include <br />

Beispiel 5.11. srv-stats.c<br />

3<br />

4 struct tms start_acct;<br />

5<br />

6 void init_srv_stats( void )<br />

7 {<br />

8 times( &start_acct ); /* Start-CPU-Zeiten festhalten */<br />

9 return;<br />

10 }<br />

11<br />

12 void print_srv_stats( void )<br />

13 {<br />

14 struct tms end_acct;<br />

15<br />

16 times( &end_acct ); /* End-CPU-Zeiten er<strong>mit</strong>teln */<br />

17<br />

18 /* Zeitdifferenzen berechnen <strong>und</strong> ausgeben */<br />

19 syslog( LOG_INFO , "CPU-Info: %d\n",<br />

20 /* CPU-Zeit im Anwendungsprozeß (User) */<br />

21 (int)( end_acct.tms_utime - start_acct.tms_utime ) +<br />

22 /* CPU-Zeit im Systemkern (System) */<br />

23 (int)( end_acct.tms_stime - start_acct.tms_stime ) +<br />

24 /* CPU-Zeit im Anwendungsprozeß (User) für die Kinder */<br />

25 (int)( end_acct.tms_cutime - start_acct.tms_cutime ) +<br />

26 /* CPU-Zeit im Systemkern (System) für die Kinder */<br />

27 (int)( end_acct.tms_cstime - start_acct.tms_cstime ) );<br />

28 return;<br />

29 }<br />

4–10<br />

12–29<br />

Mit init_srv_stats() werden dazu vor der ersten Clientanfrage die aktuellen<br />

Startwerte er<strong>mit</strong>telt <strong>und</strong> in der globalen Variable start_acct hinterlegt.<br />

Der Einsatz einer globalen Variablen ohne entsprechende Schutzmechanismen<br />

bedeutet, daß die Funktion nicht threadsicher ist. Dies spielt aber in diesem<br />

Fall keine weitere Rolle, da init_srv_stats() auch in einem mehrfädigen<br />

Programm nur ein einziges Mal aufgerufen werden sollte.<br />

Nach der letzten Clientanfrage werden dann <strong>mit</strong>tels print_srv_stats() die<br />

aktuellen Endwerte ausgelesen. Die times()-Funktion liefert getrennt die<br />

CPU-Zeiten, die für Anweisungen im Anwendungsprozeß <strong>und</strong> im Systemkern

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!