United States-English |
|
|
HP-UX Reference > Aadjtime(2)HP-UX 11i Version 3: February 2007 |
|
NAMEadjtime() — correct the time to synchronize the system clock DESCRIPTIONThe function adjtime() adjusts the current time of the system. The time is either advanced or retarded by the amount of time specified in the struct timeval pointed to by delta. The adjustment is made by applying small correctional adjustments to the value of current time that the system keeps. The time is always increasing monotonically, but at a rate slightly slower or faster than normal. A time correction for an earlier call to adjtime() may not be complete when adjtime() is called. The second call to adjtime() stops the first call to adjtime() if delta is non-NULL, but does not undo the effects of the previous call. If delta is NULL, then no time correction will be done. If olddelta is not a NULL pointer, then the structure it points to will contain, upon return, the number of seconds and/or microseconds still to be corrected from the earlier call. If olddelta is a NULL pointer, the corresponding information will not be returned. The call to adjtime() returns immediately, though its effect will continue until the whole correction is made or until modified by another call to either adjtime() with a non-NULL delta or to change the system time (see Interaction with Other System Calls). Only a user with appropriate privileges can call adjtime() successfully with a non-NULL delta. Any user can call adjtime() with a NULL delta to report the correction left from the previous call. Limitsstruct timeval is defined in <time.h> as having at least 2 members, tv_sec (seconds) and tv_usec (microseconds). When adjtime() is called, if the delta.tv_sec field is greater than 31536000 (approximately 365 days), or less than -31536000, then adjtime() fails with an errno of EINVAL. The tv_usec field is not used in the calculations to determine the limits, and so the actual limits on adjustments are [-31536000 + (LONG_MIN/1000000), 31536000 + (LONG_MAX/1000000)] seconds. Note that the desired seconds may be negative. Since the type of the tv_sec field is (unsigned long), any negative values for tv_sec need to be cast. Any olddelta value returned by the adjtime() function will be returned such that the signs of non-zero members are the same. Interaction with Other System CallsA call to change the system time terminates the adjtime() correction currently in effect. A subsequent call to adjtime() will return {0, 0} for the olddelta parameter. This includes system calls such as stime() and clock_settime(). Security RestrictionsThis system call requires the SYSATTR privilege in order to successfully usa a non-NULL delta. Processes owned by the superuser have this privilege. Processes owned by other users may have this privilege, depending on system configuration. See privileges(5) for more information about privileged access on systems that support fine-grained privileges. RETURN VALUEUpon successful completion, adjtime() returns a value of 0; otherwise, it returns a value -1 and sets errno to indicate the error. ERRORSadjtime() fails if one or more of the following is true:
EXAMPLESThe following code snippet will take the time forward 20 minutes. struct timeval forward; forward.tv_sec = 20 * 60; /* 20 minutes */ forward.tv_usec = 0; if (adjtime(&forward, (struct timeval *)NULL) == -1) perror("adjtime() failure"); /* * If adjtime() succeeds, the system time will move forward * 20 minutes over a period of time. */ The following code fragment will repeatedly call a user-defined function adjustment_still_in_progress() until the adjustment requested in a previous call to adjtime() (called from either the same process or another process) is completed. struct timeval report; if (adjtime((struct timeval *)NULL, &report) == -1) perror("adjtime() failure"); while (report.tv_sec || report.tv_usec) { adjustment_still_in_progress(); if (adjtime((struct timeval *)NULL, &report) == -1) perror("adjtime() failure"); } SEE ALSOdate(1), alarm(2), clock_settime(2), clocks(2), getitimer(2), gettimeofday(2), setitimer(2), stime(2), privileges(5). |
Printable version | ||
|