drizzt
drizzt

Reputation: 766

Uptime under linux in C

How can I retrieve uptime under linux using C? (without using popen and/or /proc)

Thanks

Upvotes: 12

Views: 13917

Answers (3)

Jack
Jack

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

Jens Gustedt
Jens Gustedt

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

user50049
user50049

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

Related Questions