| adjtimex(2) | System Calls Manual | adjtimex(2) |
adjtimex, clock_adjtime, ntp_adjtime - Régler l'horloge du noyau (kernel clock)
Bibliothèque C standard (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 utilise l'algorithme d'ajustement d'horloge de David L. Mills (voir la RFC 5905). L'appel système adjtimex() lit et écrit éventuellement les paramètres d'ajustement pour cet algorithme. Il utilise un pointeur sur une structure timex pour mettre à jour les paramètres du noyau avec les valeurs des champs (sélectionnés), et renvoyer la même structure avec les valeurs actuelles du noyau. La structure est déclarée comme suit :
struct timex {
int modes; /* choix du mode */
long offset; /* décalage temporel ; nanosecondes, si drapeau
STA_NANO est défini, sinon
microseconde*/
long freq; /* décalage de fréquence ; unités, voir NOTES */
long maxerror; /* erreur maximale (microseconde) */
long esterror; /* erreur estimée (microseconde) */
int status; /* commande horloge/état */
long constant; /* constante de temps PLL */
long precision; /* précision de l’horloge
(microseconde, lecture seule) */
long tolerance; /* tolérance fréquence horloge (lecture seule);
unités, voir NOTES */
struct timeval time;
/* heure actuelle (lecture seule, sauf pour
ADJ_SETOFFSET) ; sur renvoi, time.tv_usec
contient nanosecondes, si le drapeau
STA_NANO défini, sinon microsecondes */
long tick; /* microsecondes entre tics horloge */
long ppsfreq; /* fréquence PPS (pulse per second)
(lecture seule) ; unités, voir NOTES */
long jitter; /* jitter PPS (lecture seule) ; nanosecondes, si
drapeau état STA_NANO défini, sinon
microsecondes */
int shift; /* durée intervalle PPS
(secondes, lecture seule) */
long stabil; /* stabilité PPS (lecture seule);
unités, voir NOTES */
long jitcnt; /* nombre PPS dépassements limite de jitter
évènements (lecture seule)
long calcnt; /* nombre PPS d’intervalles de calibration
(lecture seule) */
long errcnt; /* nombre PPS d’erreurs de calibration
(lecture seule) */
long stbcnt; /* nombre PPS dépassements limite stabilité
évènements (lecture seule)
int tai; /* décalage TAI, comme défini par l’opération
ADJ_TAI (secondes, lecture seule,
depuis Linux 2.6.26) */
/* octets de remplissage supplémentaires pour une extension future*/
};
Le champ modes détermine les paramètres éventuels à écrire (comme décrit plus loin dans cette page, les constantes pour ntp_adjtime() sont équivalentes mais ont un nom différent). Il s'agit d'un masque binaire contenant une combinaison or bit à bit de zéros ou plusieurs des bits suivants :
while (buf.time.tv_usec < 0) {
buf.time.tv_sec -= 1;
buf.time.tv_usec += 1000000000;
}
Autrement, modes peut être indiqué sous la forme de valeurs suivantes (masque multibit), auquel cas aucun autre bit ne devrait être spécifié dans modes :
Les utilisateurs normaux sont limités à une valeur de modes nulle ou ADJ_OFFSET_SS_READ. Seul le superutilisateur peut écrire n'importe quel paramètre.
Le champ buf.status est un masque de bits utilisé pour définir et/ou récupérer les bits d'état associés à l'implémentation NTP. Certains bits du masque sont lisibles et modifiables, alors que d'autres ne sont qu'en lecture seule.
Les tentatives de positionner des bits d'état qui sont en lecture seule sont ignorées silencieusement.
L'appel système clock_adjtime() (ajouté à Linux 2.6.39) se comporte comme adjtimex() mais il prend un paramètre clk_id supplémentaire pour indiquer sur quelle horloge spécifique agir.
La fonction de bibliothèque ntp_adjtime() (décrite dans le « Kernel Application Program API », KAPI) est une interface plus portable pour effectuer la même tâche que adjtimex(). À part les points suivants, elle est identique à adjtimex() :
S'ils réussissent, adjtimex() et ntp_adjtime() renvoient l'état de l'horloge ; c'est-à-dire une des valeurs suivantes :
Remarquez qu'à partir de Linux 3.4, l'appel agit de manière asynchrone et la valeur renvoyée ne reflètera en général pas un changement d'état provoqué par l'appel lui-même.
En cas d'échec, ces appels renvoient -1 et définissent errno pour indiquer l'erreur.
Pour une explication des termes utilisés dans cette section, consulter attributes(7).
| Interface | Attribut | Valeur |
| ntp_adjtime() | Sécurité des threads | MT-Safe |
Aucune de ces interfaces n'est décrite par POSIX.1
adjtimex() et clock_adjtime() sont spécifiques à Linux et ils ne doivent pas être employés dans des programmes destinés à être portés sur d'autres systèmes.
L'API préférée pour le démon NTP est ntp_adjtime().
Dans une structure timex, freq, ppsfreq et stabil sont des ppm (parts per million) avec une partie décimale de 16 bits, ce qui veut dire qu'une valeur de 1 dans un de ces champs veut dire en fait 2^-16 ppm et 2^16=65536 vaut 1 ppm. Cela vaut tant pour les valeurs en entrée (dans le cas de freq) que celles en sortie.
Le traitement du saut de seconde effectué par STA_INS et STA_DEL se fait par le noyau dans le contexte de l’ordonnanceur. Ainsi, il prendra un tic de la seconde pour insérer ou supprimer un saut de seconde.
clock_gettime(2), clock_settime(2), settimeofday(2), adjtime(3), ntp_gettime(3), capabilities(7), time(7), adjtimex(8), hwclock(8)
La traduction française de cette page de manuel a été créée par Christophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin <stephan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard <fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@debian.org>, David Prévot <david@tilapin.org> et Jean-Philippe MENGUAL <jpmengual@debian.org>
Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.
Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à debian-l10n-french@lists.debian.org.
| 10 février 2023 | Pages du manuel de Linux 6.03 |