|
|
1.1 ! root 1: .\" Copyright (c) 1983 Regents of the University of California. ! 2: .\" All rights reserved. The Berkeley software License Agreement ! 3: .\" specifies the terms and conditions for redistribution. ! 4: .\" ! 5: .\" @(#)1.4.t 6.2 (Berkeley) 5/12/86 ! 6: .\" ! 7: .sh "Timers ! 8: .NH 3 ! 9: Real time ! 10: .PP ! 11: The system's notion of the current Greenwich time and the current time ! 12: zone is set and returned by the call by the calls: ! 13: .DS ! 14: #include <sys/time.h> ! 15: ! 16: settimeofday(tvp, tzp); ! 17: struct timeval *tp; ! 18: struct timezone *tzp; ! 19: ! 20: gettimeofday(tp, tzp); ! 21: result struct timeval *tp; ! 22: result struct timezone *tzp; ! 23: .DE ! 24: where the structures are defined in \fI<sys/time.h>\fP as: ! 25: .DS ! 26: ._f ! 27: struct timeval { ! 28: long tv_sec; /* seconds since Jan 1, 1970 */ ! 29: long tv_usec; /* and microseconds */ ! 30: }; ! 31: ! 32: struct timezone { ! 33: int tz_minuteswest; /* of Greenwich */ ! 34: int tz_dsttime; /* type of dst correction to apply */ ! 35: }; ! 36: .DE ! 37: The precision of the system clock is hardware dependent. ! 38: Earlier versions of UNIX contained only a 1-second resolution version ! 39: of this call, which remains as a library routine: ! 40: .DS ! 41: time(tvsec) ! 42: result long *tvsec; ! 43: .DE ! 44: returning only the tv_sec field from the \fIgettimeofday\fP call. ! 45: .NH 3 ! 46: Interval time ! 47: .PP ! 48: The system provides each process with three interval timers, ! 49: defined in \fI<sys/time.h>\fP: ! 50: .DS ! 51: ._d ! 52: #define ITIMER_REAL 0 /* real time intervals */ ! 53: #define ITIMER_VIRTUAL 1 /* virtual time intervals */ ! 54: #define ITIMER_PROF 2 /* user and system virtual time */ ! 55: .DE ! 56: The ITIMER_REAL timer decrements ! 57: in real time. It could be used by a library routine to ! 58: maintain a wakeup service queue. A SIGALRM signal is delivered ! 59: when this timer expires. ! 60: .PP ! 61: The ITIMER_VIRTUAL timer decrements in process virtual time. ! 62: It runs only when the process is executing. A SIGVTALRM signal ! 63: is delivered when it expires. ! 64: .PP ! 65: The ITIMER_PROF timer decrements both in process virtual time and when ! 66: the system is running on behalf of the process. ! 67: It is designed to be used by processes to statistically profile ! 68: their execution. ! 69: A SIGPROF signal is delivered when it expires. ! 70: .PP ! 71: A timer value is defined by the \fIitimerval\fP structure: ! 72: .DS ! 73: ._f ! 74: struct itimerval { ! 75: struct timeval it_interval; /* timer interval */ ! 76: struct timeval it_value; /* current value */ ! 77: }; ! 78: .DE ! 79: and a timer is set or read by the call: ! 80: .DS ! 81: getitimer(which, value); ! 82: int which; result struct itimerval *value; ! 83: ! 84: setitimer(which, value, ovalue); ! 85: int which; struct itimerval *value; result struct itimerval *ovalue; ! 86: .DE ! 87: The third argument to \fIsetitimer\fP specifies an optional structure ! 88: to receive the previous contents of the interval timer. ! 89: A timer can be disabled by specifying a timer value of 0. ! 90: .PP ! 91: The system rounds argument timer intervals to be not less than the ! 92: resolution of its clock. This clock resolution can be determined ! 93: by loading a very small value into a timer and reading the timer back to ! 94: see what value resulted. ! 95: .PP ! 96: The \fIalarm\fP system call of earlier versions of UNIX is provided ! 97: as a library routine using the ITIMER_REAL timer. The process ! 98: profiling facilities of earlier versions of UNIX ! 99: remain because ! 100: it is not always possible to guarantee ! 101: the automatic restart of system calls after ! 102: receipt of a signal. ! 103: The \fIprofil\fP call arranges for the kernel to begin gathering ! 104: execution statistics for a process: ! 105: .DS ! 106: profil(buf, bufsize, offset, scale); ! 107: result char *buf; int bufsize, offset, scale; ! 108: .DE ! 109: This begins sampling of the program counter, with statistics maintained ! 110: in the user-provided buffer.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.