Jak mogę odzyskać uptime pod Linuxem używając C? (Bez użycia POPEN i/lub/proc)Uptime pod linuxem w C
Dzięki
Jak mogę odzyskać uptime pod Linuxem używając C? (Bez użycia POPEN i/lub/proc)Uptime pod linuxem w C
Dzięki
Via top
lub poprzez uptime
, ale nie wiem o wszelkich syscall, ktoś będzie na pewno :)
uptime
powinny być raczej proste do analizowania.
Właśnie natknął się następująco:
#include <sys/sysinfo.h>
struct sysinfo info;
sysinfo(&info);
printf("Uptime = %ld\n", info.uptime);
Jeśli jej tam i zawiera człon uptime
, struct sysinfo
jest preferowana droga, jak Jack explained.
Innym sposobem jest odczytanie btime
z /proc/stat
, a następnie odjęcie go od bieżącego czasu. btime
to po prostu Epoka UNIX wskazująca, kiedy uruchomiono jądro.
To daje # sekund od uruchomienia, co można następnie przetłumaczyć na lata/miesiące/dni/godziny/itd. To oszczędza konieczności radzenia sobie z ciągami w /proc/uptime
. Jeśli nie ma wartości btime
, a struct sysinfo
nie ma członka o nazwie uptime
, musisz przeanalizować kod /proc/uptime
.
W przypadku współczesnych ziaren, sysinfo()
powinno działać dobrze. Większość rzeczy, które wciąż działają w wersji 2.4 (lub wcześniej) na wolności to urządzenia jakiegoś rodzaju lub inne systemy wbudowane.
Aby uzyskać czas uruchomienia systemu w bardziej przenośny sposób, należy użyć "kto -b". Aby użyć tego w programie, musiałbyś odrodzić powłokę i zinterpretować jej wynik. Niestety wydaje się, że jest to jedyne miejsce, w którym taka informacja jest dostępna w POSIX-ie, a to tylko jako rozszerzenie.
Horray for sysinfo() :) Uwaga: 'struct sysinfo' jest raczej 'shifty' między 2.4 (wczesny) 2.4 (późny) i 2.6. Jeśli Twój kod będzie prawdopodobnie używany w urządzeniach, to przydatny do uruchamiania testów kompilacji, aby zobaczyć, którzy członkowie mogą być inni. –
printf ("Uptime:% 02ld:% 02ld:% 02ld \ n", info.uptime/3600, info.uptime% 3600/60, info.uptime% 60); –
Jednakże, '' wydaje się nie istnieć podczas kompilacji jądra (vagrant & trusty64):/Jak to zrobić w tej sytuacji? –
Emixam23