version 1.123, 2013/08/22 04:43:40 |
version 1.124, 2013/10/08 03:04:17 |
|
|
struct nlist namelist[] = { |
struct nlist namelist[] = { |
#define X_UVMEXP 0 /* sysctl */ |
#define X_UVMEXP 0 /* sysctl */ |
{ "_uvmexp" }, |
{ "_uvmexp" }, |
#define X_BOOTTIME 1 /* sysctl */ |
#define X_TIME_UPTIME 1 |
{ "_boottime" }, |
{ "_time_uptime" }, |
#define X_NCHSTATS 2 /* sysctl */ |
#define X_NCHSTATS 2 /* sysctl */ |
{ "_nchstats" }, |
{ "_nchstats" }, |
#define X_KMEMSTAT 3 /* sysctl */ |
#define X_KMEMSTAT 3 /* sysctl */ |
|
|
{ "_nselcoll" }, |
{ "_nselcoll" }, |
#define X_POOLHEAD 7 /* sysctl */ |
#define X_POOLHEAD 7 /* sysctl */ |
{ "_pool_head" }, |
{ "_pool_head" }, |
|
#define X_NAPTIME 8 |
|
{ "_naptime" }, |
{ "" }, |
{ "" }, |
}; |
}; |
|
|
|
|
time_t |
time_t |
getuptime(void) |
getuptime(void) |
{ |
{ |
static struct timeval boottime; |
struct timespec uptime; |
static time_t now; |
time_t time_uptime, naptime; |
time_t uptime; |
|
size_t size; |
|
int mib[2]; |
|
|
|
if (boottime.tv_sec == 0) { |
if (nlistf == NULL && memf == NULL) { |
if (nlistf == NULL && memf == NULL) { |
if (clock_gettime(CLOCK_UPTIME, &uptime) == -1) |
size = sizeof(boottime); |
err(1, "clock_gettime"); |
mib[0] = CTL_KERN; |
return (uptime.tv_sec); |
mib[1] = KERN_BOOTTIME; |
|
if (sysctl(mib, 2, &boottime, &size, NULL, 0) < 0) { |
|
warn("could not get kern.boottime"); |
|
bzero(&boottime, sizeof(boottime)); |
|
} |
|
} else { |
|
kread(X_BOOTTIME, &boottime, sizeof(boottime)); |
|
} |
|
} |
} |
(void)time(&now); |
|
uptime = now - boottime.tv_sec; |
|
if (uptime <= 0 || uptime > 60*60*24*365*10) |
|
errx(1, "time makes no sense; namelist must be wrong"); |
|
|
|
return(uptime); |
kread(X_NAPTIME, &naptime, sizeof(naptime)); |
|
kread(X_TIME_UPTIME, &time_uptime, sizeof(time_uptime)); |
|
return (time_uptime - naptime); |
} |
} |
|
|
int hz; |
int hz; |