[ILUG] [OT] C time_elapsed function
Colm MacCarthaigh
colmmacc at redbrick.dcu.ie
Tue Nov 6 18:15:25 GMT 2001
On Tue, Nov 06, 2001 at 05:54:37PM +0000, Padraig Brady wrote:
> I can't beleive there isn't a platform independent
> getSecondsSinceBoot() function, but can't find one.
> Please tell me I'm wrong.
>
use the wtmp :)
#include <utmp.h>
#include <strings.h>
time_t bt;
struct utmp u;
int fd;
if((fd=open("/var/run/wtmp", O_RDONLY)) < 0)
/* handle error */
/* set it to all zero's */
bzero(bt, sizeof(bt));
while(read(fd, &u, sizeof(u)) == sizeof(u))
{
if(u.ut_type == BOOT_TIME)
bt = u.ut_time; /* ut_time is a portable macro */
/* dont break, we want last entry that matches */
}
close(fd);
disclaimer: only rough code, didnt check for errors/typos
you should get the general idea from this
this should be portable across anything which uses a wtmp
> Note time() and gettimeofday() both return seconds since 1970,
> and hence won't do as the value returned isn't guaranteed to
> monotonically increase (as the system date can change).
>
yep, they all return from the unix epoch, it is guranteed to
increase, as long as you keep your system time correct
> Note also that uptime in /proc/loadavg wraps after 472 days
> (32 bit jiffies). Is there a value anywhere that increments
> monotonically with second resolution?
>
not sure what you mean, the above will definitely get you a
rough boot time, subtract from current to get the real value.
it does need an accurate system time though.
If you want to know exactly how many jiffies have elapsed since
boot time (whenever you define _that_ ) you will probably need
to write a kernel patch :o)
--
------------------------------------------------------------
colmmacc at redbrick.dcu.ie
2eb21625735b864be9a1dd3245a45ce8
More information about the ILUG
mailing list