Hi, How can I retrieve uptime under linux using C? (without using popen and/or /proc)
Thanks
Hi, How can I retrieve uptime under linux using C? (without using popen and/or /proc)
Thanks
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 = %d\n",info.uptime);
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.
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.