1. The kernel provides three different ways to record time:
Wall Time(or real time): actual time and date in the real worldProcess Time: The time, a process spends executing on a processor includes user times and system time themonotonic Time: Use the system ' suptime (time since boot)For this purpose,guarantee, the time source is strictly linearly increasing UNIX represents absolute timing: the number of elapsed seconds s Ince the epoch, which is defined as00:00:00UTC on the morning of
1 January 1970On Linux, the frequency of the system timer is called HZ,The value of HZ is Architecture-specificPOSIX functions that return time in terms of the clock ticks use
clocks_per_sec To represent the fixed frequency 2. The original representation of the data structure of the time representation:
long time_t;
That's won ' t last long before
Overflowing! Microsecond precision means:
#include <sys/time.h> Timeval {time_t tv_sec; /* seconds suseconds_t Tv_usec; /* microseconds Span style= "Color:rgb (0, 128, 0); >*/ };
<time.h>struct timespec { time_t tv_sec; /* */ long tv_nsec; /* */};
3. Get the current time
#include <time.h>*t);
Time () returns the current time represented as the number of seconds elapsed since the epoch
#include <sys/time.h>int gettimeofday(structstruct timezone *tz);
Gettimeofday () places the current time of the timeval structure pointed at by TV and returns 0
parameter TZ is always null
struct Timeval TV; int Ret;ret = gettimeofday (&tv, NULL ); if (ret) perror ( gettimeofday " else printf ( seconds=%ld useconds=%ld\n " , ( long ) Tv.sec, (long ) tv.tv_usec);
#include <sys/times.h>structTMS {clock_t tms_utime; /*User Time consumed*/clock_t Tms_stime; /*system time consumed*/clock_t Tms_cutime; /*user time consumed by children*/clock_t Tms_cstime; /*system time consumed by children*/};clock_t Times (structTMS *buf);
User time is the time spent executing code in user space. System time is the time spent executing code in kernel space. 4. Set the current time
#include <time.h>int stime (time_t *<sys/time.h>int settimeofday (const structconststruct timezone *tz);
Parameter TZ is always null
struct 31415926 27182818 }; int = Settimeofday (&TV, NULL); if (ret) perror ("settimeofday");
5. Sleep hibernation
/* puts the invoking process to sleepfor the number of seconds*/<unistd.h> /c6>intint seconds);
/* */#define _xopen_source<unistd.h>int int usec);
#include <sys/Select.h>intSelect (intstruct timeval *timeout);
The Select function sets the parameter n to 0, and the three detection event set is set to null, when the select is equivalent to a sleep function of the exact time, and this usage is most portable
struct 0 757 }; Select (0, NULL, NULL, NULL, &TV);
6. Timer timers provide a mechanism for notifying a process when a given amount of time elapses simple timer:
#include <unistd.h>intint seconds);
Schedules the delivery of a SIGALRM signal to the invoking process after seconds of real time has elapsed
void alarm_handler (int signum) { printf ("Five seconds passed!\n " );} void func (void) { signal (SIGALRM, alarm_handler); Alarm (5); Pause ();}
Interval Timer:
#include <sys/time.h>intGetitimer (intWhich,structItimerval *value);intSetitimer (intWhich,Const structItimerval *value,structItimerval *ovalue);structItimerval {structTimeval It_interval;/*Next Value*/ structTimeval It_value;/*Current value*/};structTimeval {LongTv_sec;/*seconds*/ LongTv_usec;/*microseconds*/};
voidAlarm_handler (intSigno) {printf ("Timer hit!\n");}voidFoo (void){ structitimerval delay; intret; Signal (SIGALRM, Alarm_handler); Delay.it_value.tv_sec=5; Delay.it_value.tv_usec=0; Delay.it_interval.tv_sec=1; Delay.it_interval.tv_usec=0; RET= Setitimer (Itimer_real, &delay, NULL); if(ret) {perror ("Setitimer"); return; } pause ();}