ADJTIMEX(2)

NOM
adjtimex - Régler l'horloge du noyau (kernel clock)

SYNOPSIS
#include <sys/timex.h>

int adjtimex(struct timex *buf);

DESCRIPTION
Linux utilise l'algorithme d'ajustement d'horloge de David L. Mills (RFC 1305). 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 de ses champs, 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 (usec) */
    long freq;           /* décalage fréquentiel (scaled ppm) */
    long maxerror;       /* erreur maximale (usec) */
    long esterror;       /* erreur estimée (usec) */
    int status;          /* commande/état de l'horloge */
    long constant;       /* constante de temps pll */
    long precision;      /* précision de l'horloge (usec)
                            (lecture seule) */
    long tolerance;      /* tolérance sur la fréquence de l'horloge (ppm)
                            (lecture seule) */
    struct timeval time; /* heure actuelle (lecture seule)) */
    long tick;           /* microsecondes entre les tops de l'horloge */
};

Le champ modes détermine les paramètres éventuels à écrire. Il contient un OU binaire « | » entre les valeurs suivantes :

#define ADJ_OFFSET            0x0001 /* décalage temporel */
#define ADJ_FREQUENCY         0x0002 /* décalage fréquentiel */
#define ADJ_MAXERROR          0x0004 /* erreur temporelle maximale */
#define ADJ_ESTERROR          0x0008 /* erreur temporelle estimée */
#define ADJ_STATUS            0x0010 /* état de l'horloge */
#define ADJ_TIMECONST         0x0020 /* constante de temps pll */
#define ADJ_TICK              0x4000 /* valeur du top */
#define ADJ_OFFSET_SINGLESHOT 0x8001 /* ancien adjtime() */

Les utilisateurs normaux sont limités à une valeur de mode nulle, seul le superutilisateur peut écrire les paramètres.

VALEUR RENVOYÉE
S'il réussit, adjtimex() renvoie l'état de l'horloge :

#define TIME_OK   0 /* horloge synchronisée */
#define TIME_INS  1 /* ajout d'une seconde d'ajustement */
#define TIME_DEL  2 /* suppression d'une seconde d'ajustement */
#define TIME_OOP  3 /* seconde d'ajustement en cours */
#define TIME_WAIT 4 /* seconde d'ajustement terminée */
#define TIME_BAD  5 /* horloge non synchronisée */

En cas d'échec adjtimex() renvoie -1 et errno contient le code d'erreur.

ERREURS

EFAULT
    buf pointe en dehors de l'espace d'adressage accessible en écriture.

EINVAL
    Une tentative est faite de remplir buf.offset en dehors de l'intervalle -131071 à +131071, ou de mettre buf.status à une valeur autre que celles listées ci-dessus, ou buf.tick en dehors de l'intervalle 900000 HZ à 1100000 HZ, où HZ est la fréquence d'interruption de l'horloge système.

EPERM
    buf.mode est non nul, et l'appelant n'a pas suffisamment de privilèges. Sous Linux, la capacité CAP_SYS_TIME est nécessaire.

CONFORMITÉ
adjtimex() est spécifique à Linux, et ne doit pas être employé dans des programmes destinés à être portables. Voir adjtime(3) pour une méthode plus portable, mais moins flexible, d'ajustement de l'horloge système.

VOIR AUSSI
settimeofday(2), adjtime(3), capabilities(7), time(7)

TRADUCTION

Ce document est une traduction réalisée par Christophe Blaess <http://www.blaess.fr/christophe/> le 14 octobre 1996 et révisée le 17 juillet 2008.

L'équipe de traduction a fait le maximum pour réaliser une adaptation française de qualité. La version anglaise la plus à jour de ce document est toujours consultable via la commande : « LANG=C man 2 adjtimex ». N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute erreur dans cette page de manuel.