Reputation: 766
How can I retrieve uptime under linux using C? (without using popen and/or /proc)
Thanks
Upvotes: 12
Views: 13917
Reputation: 133669
Via top
or via uptime
, but I don't know about any syscall, someone will for sure :)
uptime
should be rather easy to parse.
Just stumbled into this:
#include <sys/sysinfo.h>
struct sysinfo info;
sysinfo(&info);
printf("Uptime = %ld\n", info.uptime);
Upvotes: 22
Reputation: 79003
To get the system start time in a more portable way, would be to use "who -b". To use this in a program you would have to spawn a shell and interpret its output. Unfortunately this seems the only place where such an information is available in POSIX, and this also only as an extension.
Upvotes: 1
Reputation:
If its there and contains the member uptime
, struct sysinfo
is the preferred way to go, as Jack explained.
The other way is to read btime
out of /proc/stat
, then just subtract it from the current time. btime
is just a UNIX epoch indicating when the kernel booted.
That gives you the # of seconds since boot, which you can then translate into years / months / days / hours / etc. This saves having to deal with strings in /proc/uptime
. If btime
isn't there, and struct sysinfo
has no member named uptime
, you have to parse /proc/uptime
.
For modern kernels, sysinfo()
should work just fine. Most things still running 2.4 (or earlier) out in the wild are appliances of some kind or other embedded systems.
Upvotes: 2