📄 time.h
字号:
#ifndef _LINUX_TIME_H#define _LINUX_TIME_H#include <linux/types.h>#ifdef __KERNEL__# include <linux/seqlock.h>#endif#ifndef _STRUCT_TIMESPEC#define _STRUCT_TIMESPECstruct timespec { time_t tv_sec; /* seconds */ long tv_nsec; /* nanoseconds */};#endifstruct timeval { time_t tv_sec; /* seconds */ suseconds_t tv_usec; /* microseconds */};struct timezone { int tz_minuteswest; /* minutes west of Greenwich */ int tz_dsttime; /* type of dst correction */};#ifdef __KERNEL__/* Parameters used to convert the timespec values: */#define MSEC_PER_SEC 1000L#define USEC_PER_MSEC 1000L#define NSEC_PER_USEC 1000L#define NSEC_PER_MSEC 1000000L#define USEC_PER_SEC 1000000L#define NSEC_PER_SEC 1000000000L#define FSEC_PER_SEC 1000000000000000Lstatic inline int timespec_equal(struct timespec *a, struct timespec *b){ return (a->tv_sec == b->tv_sec) && (a->tv_nsec == b->tv_nsec);}/* * lhs < rhs: return <0 * lhs == rhs: return 0 * lhs > rhs: return >0 */static inline int timespec_compare(struct timespec *lhs, struct timespec *rhs){ if (lhs->tv_sec < rhs->tv_sec) return -1; if (lhs->tv_sec > rhs->tv_sec) return 1; return lhs->tv_nsec - rhs->tv_nsec;}static inline int timeval_compare(struct timeval *lhs, struct timeval *rhs){ if (lhs->tv_sec < rhs->tv_sec) return -1; if (lhs->tv_sec > rhs->tv_sec) return 1; return lhs->tv_usec - rhs->tv_usec;}extern unsigned long mktime(const unsigned int year, const unsigned int mon, const unsigned int day, const unsigned int hour, const unsigned int min, const unsigned int sec);extern void set_normalized_timespec(struct timespec *ts, time_t sec, long nsec);/* * sub = lhs - rhs, in normalized form */static inline struct timespec timespec_sub(struct timespec lhs, struct timespec rhs){ struct timespec ts_delta; set_normalized_timespec(&ts_delta, lhs.tv_sec - rhs.tv_sec, lhs.tv_nsec - rhs.tv_nsec); return ts_delta;}/* * Returns true if the timespec is norm, false if denorm: */#define timespec_valid(ts) \ (((ts)->tv_sec >= 0) && (((unsigned long) (ts)->tv_nsec) < NSEC_PER_SEC))extern struct timespec xtime;extern struct timespec wall_to_monotonic;extern seqlock_t xtime_lock;void timekeeping_init(void);static inline unsigned long get_seconds(void){ return xtime.tv_sec;}struct timespec current_kernel_time(void);#define CURRENT_TIME (current_kernel_time())#define CURRENT_TIME_SEC ((struct timespec) { xtime.tv_sec, 0 })extern void do_gettimeofday(struct timeval *tv);extern int do_settimeofday(struct timespec *tv);extern int do_sys_settimeofday(struct timespec *tv, struct timezone *tz);#define do_posix_clock_monotonic_gettime(ts) ktime_get_ts(ts)extern long do_utimes(int dfd, char __user *filename, struct timeval *times);struct itimerval;extern int do_setitimer(int which, struct itimerval *value, struct itimerval *ovalue);extern unsigned int alarm_setitimer(unsigned int seconds);extern int do_getitimer(int which, struct itimerval *value);extern void getnstimeofday(struct timespec *tv);extern struct timespec timespec_trunc(struct timespec t, unsigned gran);extern int timekeeping_is_continuous(void);/** * timespec_to_ns - Convert timespec to nanoseconds * @ts: pointer to the timespec variable to be converted * * Returns the scalar nanosecond representation of the timespec * parameter. */static inline s64 timespec_to_ns(const struct timespec *ts){ return ((s64) ts->tv_sec * NSEC_PER_SEC) + ts->tv_nsec;}/** * timeval_to_ns - Convert timeval to nanoseconds * @ts: pointer to the timeval variable to be converted * * Returns the scalar nanosecond representation of the timeval * parameter. */static inline s64 timeval_to_ns(const struct timeval *tv){ return ((s64) tv->tv_sec * NSEC_PER_SEC) + tv->tv_usec * NSEC_PER_USEC;}/** * ns_to_timespec - Convert nanoseconds to timespec * @nsec: the nanoseconds value to be converted * * Returns the timespec representation of the nsec parameter. */extern struct timespec ns_to_timespec(const s64 nsec);/** * ns_to_timeval - Convert nanoseconds to timeval * @nsec: the nanoseconds value to be converted * * Returns the timeval representation of the nsec parameter. */extern struct timeval ns_to_timeval(const s64 nsec);/** * timespec_add_ns - Adds nanoseconds to a timespec * @a: pointer to timespec to be incremented * @ns: unsigned nanoseconds value to be added */static inline void timespec_add_ns(struct timespec *a, u64 ns){ ns += a->tv_nsec; while(unlikely(ns >= NSEC_PER_SEC)) { ns -= NSEC_PER_SEC; a->tv_sec++; } a->tv_nsec = ns;}#endif /* __KERNEL__ */#define NFDBITS __NFDBITS#define FD_SETSIZE __FD_SETSIZE#define FD_SET(fd,fdsetp) __FD_SET(fd,fdsetp)#define FD_CLR(fd,fdsetp) __FD_CLR(fd,fdsetp)#define FD_ISSET(fd,fdsetp) __FD_ISSET(fd,fdsetp)#define FD_ZERO(fdsetp) __FD_ZERO(fdsetp)/* * Names of the interval timers, and structure * defining a timer setting: */#define ITIMER_REAL 0#define ITIMER_VIRTUAL 1#define ITIMER_PROF 2struct itimerspec { struct timespec it_interval; /* timer period */ struct timespec it_value; /* timer expiration */};struct itimerval { struct timeval it_interval; /* timer interval */ struct timeval it_value; /* current value */};/* * The IDs of the various system clocks (for POSIX.1b interval timers): */#define CLOCK_REALTIME 0#define CLOCK_MONOTONIC 1#define CLOCK_PROCESS_CPUTIME_ID 2#define CLOCK_THREAD_CPUTIME_ID 3/* * The IDs of various hardware clocks: */#define CLOCK_SGI_CYCLE 10#define MAX_CLOCKS 16#define CLOCKS_MASK (CLOCK_REALTIME | CLOCK_MONOTONIC)#define CLOCKS_MONO CLOCK_MONOTONIC/* * The various flags for setting POSIX.1b interval timers: */#define TIMER_ABSTIME 0x01#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -