ADJTIME(3)

NOME
adjtime - corregge l'orario per sincronizzare l'orologio di sistema

SINTASSI
int adjtime(const struct timeval *delta, struct timeval *olddelta);

Test delle funzioni e requisiti delle macro per glibc (vedere feature_test_macros(7)):

adjtime(): _BSD_SOURCE

DESCRIZIONE
La funzione adjtime() regola in modo graduale l'orario di sistema (restituito da gettimeofday(2)). L'ammontare di tempo con cui regolare l'orologio è specificato nella struttura a cui punta delta. Questa struttura ha la forma seguente:
struct timeval {
    time_t      tv_sec;     /* secondi */
    suseconds_t tv_usec;    /* microsecondi */
};

Se la regolazione in delta è positiva, l'orologio di sistema viene accellerato di qualche punto percentuale (per esempio aggiungendo una piccola quantità  di tempo al valore dell'orario per ogni secondo) finché la regolazione non è stata completata. Se la regolazione in delta è negativa, l'orologio viene rallentato in maniera simile. Se avviene una chiamata ad adjtime() mentre è in corso una regolazione dell'orario relativa ad una chiamata precedente di adjtime() , e delta non è NULL per l'ultima chiamata, la chiamata precedente viene terminata, senza però scartare nessuna correzione parziale già completata. Se olddelta non è NULL, allora il buffer a cui punta viene usato per restituire l'ammontare di tempo rimanente dalle precedenti correzioni non ancora completate.

VALORE RESTITUITO
Se termina con successo, adjtime() restituisce 0. Se fallisce, viene restituito -1, e errno viene valorizzato per indicare l'errore.

ERRORI

EINVAL
    La correzione in delta è fuori dall'intervallo permesso.

EPERM
    Il chiamante non ha privilegi sufficienti per correggere l'orario. In Linux è richiesta l'abilitazione a CAP_SYS_TIME .

CONFORME A
4.3BSD, System V.

NOTE
La correzione che adjtime() effettua sull'orologio viene eseguita in modo che quest'ultimo venga sempre incrementato uniformemente. Usando adjtime() per correggere l'orario si evitano problemi di funzionamento per certe applicazioni (per esempio, make(1)) dovuti a improvvise variazioni positive o negative dell'orario di sistema. adjtime() è stato progettato per effettuare piccole correzioni all'orario di sistema. Molti sistemi impongono un limite alla correzione, che può essere specificato in delta. Nell'implementazione di glibc, delta dev'essere minore o uguale a (INT_MAX / 1000000 - 2) e maggiore o uguale a (INT_MIN / 1000000 + 2) (rispettivamente 2145 e -2145 secondi in x86).

BUG
Attualmente, se delta viene valorizzato a NULL, a olddelta non viene restituita alcuna informazione valida riguardo la correzione in sospeso dell'orologio. (In questo caso, adjtime() dovrebbe restituire la correzione dell'orario in sospeso, senza cambiarla.) Questo è il risultato di una limitazione del kernel.

VEDERE ANCHE
adjtimex(2), gettimeofday(2), time(7)