NAME¶
adjtimex - regola l'orologio del kernel
SINTASSI¶
#include <sys/timex.h>
int adjtimex(struct timex *buf);
DESCRIZIONE¶
Linux usa l'algoritmo di correzione dell'orario di David L. Mill (vedere RFC
1305). La chiamata di sistema
adjtimex() legge e imposta opzionalmente
i parametri di correzione per questo algoritmo. Accetta un puntatore a una
struttura
timex , aggiorna i parametri del kernel in base ai valori dei
campi, e restituisce la medesima struttura con i valori correnti del kernel.
La struttura è dichiarata nel seguento modo:
struct timex {
int modes; /* selettore modalità */
long offset; /* spostamento orario (usec) */
long freq; /* spostamento frequenza (scaled ppm) */
long maxerror; /* errore massimo (usec) */
long esterror; /* errore stimato (usec) */
int status; /* stato/comando orologio */
long constant; /* costante di tempo pll */
long precision; /* precisione orologio (usec) (sola lettura) */
long tolerance; /* tolleranza frequenza orologio (ppm)
(sola lettura) */
struct timeval time; /* orario attuale (sola lettura) */
long tick; /* usec tra i battiti dell'orologio */
};
Il campo
modes determina quale eventuale parametro impostare. Può
contenere una combinazione bitwise-or (OR bit-a-bit) di zero o più dei
seguenti bit:
#define ADJ_OFFSET 0x0001 /* spostamento orario */
#define ADJ_FREQUENCY 0x0002 /* spostamento frequenza */
#define ADJ_MAXERROR 0x0004 /* errore tempo massimo */
#define ADJ_ESTERROR 0x0008 /* errore tempo stimato */
#define ADJ_STATUS 0x0010 /* stato orologio */
#define ADJ_TIMECONST 0x0020 /* costante di tempo pll */
#define ADJ_TICK 0x4000 /* valore battito */
#define ADJ_OFFSET_SINGLESHOT 0x8001 /* vecchio adjtime() */
Gli utenti ordinari sono limitati al valore zero per
mode. Solo il
superutente può impostare qualunque parametro.
VALORE RESTITUITO¶
In caso di successo,
adjtimex() restituisce lo stato dell'orologio:
#define TIME_OK 0 /* orologio sincronizzato */
#define TIME_INS 1 /* inserire secondo intercalare */
#define TIME_DEL 2 /* cancellare secondo intercalare */
#define TIME_OOP 3 /* secondo intercalare in corso */
#define TIME_WAIT 4 /* secondo intercalare avvenuto */
#define TIME_BAD 5 /* orologio non sincronizzato */
Se fallisce,
adjtimex() restituisce -1 e imposta
errno.
ERRORI¶
- EFAULT
- buf non punta ad una zona di memoria scrivibile.
- EINVAL
- Si è tentato di impostare buf.offset ad un valore fuori
dall'intervallo -131071 e +131071, o di impostare buf.status ad un
valore diverso da quelli elencati in precedenza, o di impostare
buf.tick ad un valore non incluso nell'intervallo 900000/HZ
e 1100000/HZ, dove HZ E' la frequenza dell'interrupt del
timer di sistema.
- EPERM
- buf.mode non è zero e il chiamante non ha privilegi
sufficienti. In Linux è richiesta l'abilitazione a
CAP_SYS_TIME
adjtimex() è specifico di Linux e non dovrebbe essere usato in
programmi pensati per la portabilità . Vedere
adjtime(3)
per un maggiormente portabile, ma meno flessibile metodo di correzione
dell'orologio di sistema.
VEDERE ANCHE¶
settimeofday(2),
adjtime(3),
capabilities(7)