Wie kann ich Uptime unter Linux mit C abrufen? (Ohne Verwendung von popen und/oder/proc)Uptime unter Linux in C
Dank
Wie kann ich Uptime unter Linux mit C abrufen? (Ohne Verwendung von popen und/oder/proc)Uptime unter Linux in C
Dank
Via top
oder über uptime
, aber ich weiß nicht, über jede syscall, jemand wird sicher :)
uptime
sollte ziemlich einfach sein analysieren.
stolperte in diese:
#include <sys/sysinfo.h>
struct sysinfo info;
sysinfo(&info);
printf("Uptime = %ld\n", info.uptime);
Wenn seine dort und enthält das Element uptime
, struct sysinfo
die bevorzugte Art und Weise ist, wie Jack explained zu gehen.
Der andere Weg ist, btime
aus /proc/stat
zu lesen, dann subtrahieren Sie es nur von der aktuellen Zeit. btime
ist nur eine UNIX-Epoche, die anzeigt, wann der Kernel gebootet hat.
Das gibt Ihnen die Anzahl der Sekunden seit dem Hochfahren, die Sie dann in Jahre/Monate/Tage/Stunden/etc. übersetzen können. Dies erspart den Umgang mit Strings in /proc/uptime
. Wenn btime
nicht vorhanden ist und struct sysinfo
kein Mitglied mit dem Namen uptime
hat, müssen Sie /proc/uptime
analysieren.
Für moderne Kernel, sysinfo()
sollte gut funktionieren. Die meisten Dinge, die immer noch 2.4 (oder früher) in freier Wildbahn laufen, sind Appliances irgendeiner Art oder andere eingebettete Systeme.
Um die Startzeit des Systems in einer portabeleren Weise zu erhalten, wäre es, "who -b" zu verwenden. Um dies in einem Programm zu verwenden, müssten Sie eine Shell erstellen und deren Ausgabe interpretieren. Leider scheint dies der einzige Ort zu sein, wo solche Informationen in POSIX verfügbar sind, und dies auch nur als Erweiterung.
Horray für sysinfo() :) NB: 'struct sysinfo' ist ziemlich" shifty "zwischen 2.4 (früh) 2.4 (spät) und 2.6. Wenn Ihr Code wahrscheinlich für Appliances verwendet wird, sollten Sie Build-Prüfungen durchführen, um festzustellen, welche Elemente sich möglicherweise unterscheiden. –
printf ("Betriebszeit:% 02ld:% 02ld:% 02ld \ n", info.uptime/3600, info.uptime% 3600/60, info.uptime% 60); –
"' scheint jedoch nicht zu existieren, wenn Sie den Kernel kompilieren (vagrant & trusty64):/Wie geht es in dieser Situation? –
Emixam23