| adjtimex(2) | System Calls Manual | adjtimex(2) |
adjtimex, clock_adjtime, ntp_adjtime - regola l'orologio del kernel
Standard C library (libc, -lc)
#include <sys/timex.h>
int adjtimex(struct timex *buf);
int clock_adjtime(clockid_t clk_id, struct timex *buf);
int ntp_adjtime(struct timex *buf);
Linux usa l'algoritmo di correzione dell'ora di David L. Mill (vedere RFC 5905). La chiamata di sistema adjtimex() legge e può all'occorrenza modificare i parametri di correzione per questo algoritmo. Richiede un puntatore a una struttura timex, aggiorna i parametri del kernel in base ai valori dei campi (selezionati) e restituisce la medesima struttura aggiornata con i valori correnti del kernel. La struttura è dichiarata nel seguento modo:
struct timex {
int modes; /* Selettore modalità */
long offset; /* Scostamento orario; nanosecondi, se è impostato il
flag STA_NANO, altrimenti
microsecondi */
long freq; /* Scostamento frequenza; per le unità vedi NOTE) */
long maxerror; /* Errore massimo (microsecondi) */
long esterror; /* Errore stimato (microsecondi) */
int status; /* Comando/stato orologio */
long constant; /* Costante di tempo PLL (anello ad aggancio di fase
[Phase-Locked Loop])*/
long precision; /* Precisione orologio
(microsecondi, sola lettura) */
long tolerance; /* Tolleranza frequenza orologio (sola lettura);
vedi NOTE per le unità */
struct timeval time;
/* Ora attuale (sola lettura, eccetto che per
ADJ_SETOFFSET); a chiamata eseguita, time.tv_usec
ccontiene nanosecondi, se il flag di stato STA_NANO
è impostato, altrimenti microsecondi) */
long tick; /* Microsecondi tra i battiti dell'orologio */
long ppsfreq; /* Frequenza PPS (impulsi al secondo)
(sola lettura); vedi NOTE per le unità */
long jitter; /* Variazione PPS (sola lettura); nanosecondi, se il
flag di stato STA_NANO è impostato, altrimenti
microsecondi */
int shift; /* Durata dell'intervallo PPS
(secondsi, sola lettura) */
long stabil; /* Stabilità PPS (sola lettura);
vedi NOTE per le unità */
long jitcnt; /* Conteggio degli eventi di limite variazione PPS
superato (sola lettura) */
long calcnt; /* Conteggio degli intervalli di calibrazione PPS
(sola lettura) */
long errcnt; /* Conteggio degli errori di calibrazione PPS
(sola lettura) */
long stbcnt; /* Conteggio degli eventi di limite di stabilità PPS
superato (sola lettura) */
int tai; /* Scostamento TAI, come impostato dall'ultima
operazione ADJ_TAI (secondi, sola lettura,
a partire da Linux 2.6.26) */
/* Ulteriori byte disponibili in previsione di future espansioni */
};
Il campo modes determina quali eventuali parametri impostare. (Come descritto più avanti in questa pagina, le costanti usate per ntp_adjtime() sono equivalenti ma denominate in modo diverso.) Consiste in una maschera bit a bit di tipo OR che imposta zero o più dei seguenti bit:
while (buf.time.tv_usec < 0) {
buf.time.tv_sec -= 1;
buf.time.tv_usec += 1000000000;
}
In alternativa, modes può essere specificato come uno dei seguenti valori (maschera multibit), nel qual caso non si dovrebbero utilizzare altri bit in modes:
Gli utenti ordinari sono limitati al valore 0 o ADJ_OFFSET_SS_READ per modes. Solo il superutente può impostare qualsiasi parametro.
Il campo buf.status è una maschera di bit usata per impostare e/o leggere bit di stato associati con l'implementazione NTP. Alcuni bit nella maschera possono essere usati sia per leggere che per impostare, mentre altri sono in sola lettura.
I tentativi di modificare i bit di stato in sola lettura sono ignorati senza emettere messaggi.
La chiamata di sistema clock_adjtime() (aggiunta in in Linux 2.6.39) si comporta come adjtimex() ma ha un uteriore argomento clk_id per indicare lo specifico orologio sul quale agisce.
La funzione di libreria ntp_adjtime() (descritta in NTP "Kernel Application Program API", KAPI) è un'interfaccia più portabile per eseguire lo stesso compito di adjtimex(). A parte i punti seguenti, è identica a adjtimex():
In caso di successo, adjtimex() e ntp_adjtime() restituiscono lo stato dell'orologio; cioè, uno dei seguenti valori:
Si noti che a partire da Linux 3.4, la chiamata opera in modo asincrono e il valore restituito usualmente non non riflette un cambiamento di stato causato dalla chiamata stessa.
Se falliscono, queste chiamate restituiscono -1 e impostano errno per indicare l'errore.
Per la spiegazione dei termini usati in questa sezione, vedere attributes(7).
| Interfaccia | Attributo | Valore |
| ntp_adjtime() | Thread safety | MT-Safe |
Nessuna di queste interfacce è descritta in POSIX.1
adjtimex() e clock_adjtime() sono specifici di Linux e non dovrebbe essere usato in programmi pensati per la portabilità.
L'API da preferire per il demone NTP è ntp_adjtime(3).
In struct timex, freq, ppsfreq, and stabil are ppm (parts per million) with a 16-bit fractional part, which means that a value of 1 in one of those fields actually means 2^-16 ppm, and 2^16=65536 is 1 ppm. This is the case for both input values (in the case of freq) and output values.
L'elaborazione del secondo intercalare innescato da STA_INS e STA_DEL è fatto dal kernel nell'ambito del timer. Quindi, è allo scoccare esatto di un secondo che il secondo intercalare sarà aggiunto o tolto.
clock_gettime(2), clock_settime(2), settimeofday(2), adjtime(3), ntp_gettime(3), capabilities(7), time(7), adjtimex(8), hwclock(8)
La traduzione italiana di questa pagina di manuale è stata creata da Davide Cendron <davcen@interfree.it>, Antonio Giovanni Colombo <azc100@gmail.com> e Marco Curreli <marcocurreli@tiscali.it>
Questa traduzione è documentazione libera; leggere la GNU General Public License Versione 3 o successiva per le condizioni di copyright. Non ci assumiamo alcuna responsabilità.
Per segnalare errori nella traduzione di questa pagina di manuale inviare un messaggio a pluto-ildp@lists.pluto.it.
| 10 febbraio 2023 | Linux man-pages 6.03 |