gettimeofday(2)

NOM
gettimeofday, settimeofday - Lire/écrire l'heure actuelle

BIBLIOTHÈQUE
Bibliothèque C standard (libc, -lc)

SYNOPSIS
#include <sys/time.h>

int gettimeofday(struct timeval *restrict tv,
                 struct timezone *_Nullable restrict tz);
int settimeofday(const struct timeval *tv,
                 const struct timezone *_Nullable tz);

    Exigences de macros de test de fonctionnalités pour la glibc (consulter feature_test_macros(7)) :

settimeofday() :
    Depuis la glibc 2.19 :
        _DEFAULT_SOURCE
    glibc 2.19 et antérieures :
        _BSD_SOURCE

DESCRIPTION
Les fonctions gettimeofday() et settimeofday() servent à lire ou programmer l'heure ainsi que le fuseau horaire (timezone).

L'argument tv est une structure timeval (comme indiqué dans <sys/time.h>) :

    struct timeval {
        time_t      tv_sec;     /* secondes */
        suseconds_t tv_usec;    /* microsecondes */
    };

et donne le nombre de secondes et microsecondes écoulées depuis l'epoch (consultez time(2)).

L'argument tz est une structure timezone :

    struct timezone {
        int tz_minuteswest; /* minutes à l'ouest de Greenwich   */
        int tz_dsttime;     /* type de changement d’heure d’été */
    };

Si tv ou tz est NULL, la structure correspondante n'est ni remplie ni renvoyée. (Cependant, des avertissements à la compilation seront émis si tv est NULL.)

L'utilisation de la structure timezone est obsolète ; le paramètre tz doit normalement être NULL. Consultez HISTORIQUE.

Sous Linux, il existe une sémantique particulière associée à l'appel système settimeofday() si durant la première invocation (après l’amorçage) il a un argument tz non NULL, l'argument tv est NULL et le champ tz_minuteswest est différent de zéro (dans ce cas, le champ tz_dsttime doit être nul). Dans ce cas, on suppose que l'horloge CMOS de la machine est configurée sur l'heure locale, et qu'on doit l'augmenter de cette valeur pour obtenir l'heure UTC. Bien entendu, il faut éviter autant que possible d'utiliser cette particularité.

VALEUR RENVOYÉE
gettimeofday et settimeofday renvoient 0 s'ils réussissent, ou -1 s'ils échouent, auquel cas errno est positionné pour indiquer l'erreur.

ERREURS

EFAULT
    tv ou tz pointent en dehors de l'espace d'adressage autorisé.

EINVAL
    (settimeofday()) : timezone n'est pas valable.

EINVAL
    (settimeofday()) : tv.tv_sec est négatif ou tv.tv_usec dépasse l'intervalle [0-999999].

EINVAL (depuis Linux 4.3)
    (settimeofday()) : tentative de positionner l'heure sur une valeur inférieure à l'heure actuelle de l'horloge CLOCK_MONOTONIC (voir clock_gettime(2)).

EPERM
    Le processus appelant n'a pas les privilèges suffisants pour appeler settimeofday() ; sous Linux, la capacité CAP_SYS_TIME est nécessaire.

VERSIONS

  Différences entre bibliothèque C et noyau
Sur certaines architectures, une implémentation de gettimeofday() est fournie dans vdso(7).

Le noyau accepte NULL pour à la fois tv et tz. L'argument timezone est ignoré par glibc et musl et n'est pas passé depuis ou vers le noyau. Bionic d'Android passe l'argument timezone depuis ou vers le noyau, mais Android ne met pas à jour le fuseau horaire en se basant sur le fuseau horaire dans les Paramètres, ainsi le fuseau horaire du noyau est habituellement UTC.

STANDARDS

gettimeofday()
    POSIX.1-2008 (obsolète).

settimeofday()
    Aucun.

HISTORIQUE
SVr4, 4.3BSD. POSIX.1-2001 décrit gettimeofday() mais pas settimeofday(). POSIX.1-2008 marque gettimeofday() comme étant obsolète, en recommandant d'utiliser clock_gettime(2) à la place.

Traditionnellement, les champs de la structure timeval étaient de type long.

  Le champ tz_dsttime
Sur un noyau non Linux, avec la glibc, le champ tz_dsttime de la structure timezone sera positionné sur une valeur non nulle par gettimeofday() si il a été appliqué ou sera appliqué au fuseau horaire actuel une règle de sauvegarde d’heure d’été. Dans ce sens, elle reflète exactement la signification de daylight(3) pour la zone actuelle. Sur Linux avec la glibc, le positionnement du champ tz_dsttime de la structure timezone n'a jamais été utilisé par settimeofday() ou gettimeofday(). Ainsi, ce qui suit n'a qu'un intérêt historique.

Sur d'anciens systèmes, le champ tz_dsttime contient une constante symbolique (dont les valeurs sont fournies ci-dessous) qui indique quelle partie du changement d’heure d’été annuel est en cours. (Remarque : cette valeur est constante tout au long de l'année, elle n'indique pas réellement la valeur que cette heure d’été est en cours, elle sélectionne un algorithme). Les changements d’heure d’été (Daylight Saving Time - DST) sont définis comme suit :

    DST_NONE     /* pas sur DST */
    DST_USA      /* DST à l'américaine */
    DST_AUST     /* DST à l'australienne */
    DST_WET      /* DST d'Europe occidentale */
    DST_MET      /* DST d'Europe centrale */
    DST_EET      /* DST d'Europe de l'Est */
    DST_CAN      /* Canada */
    DST_GB       /* Grande-Bretagne et Irlande */
    DST_RUM      /* Roumanie */
    DST_TUR      /* Turquie */
    DST_AUSTALT  /* Style australien avec changement en 1986 */

Il est évident que la période de l’heure d’été en cours ne peut pas être uniquement fournie par un algorithme par pays. Ce décalage dépend de décisions politiques imprévisibles. Aussi, cette méthode de représentation des fuseaux horaires a été abandonnée.

NOTES
L'heure renvoyée par gettimeofday() est concernée par les sauts discontinus de l'heure système (c'est-à-dire si l'administrateur modifie l'heure système lui-même). Si vous devez incrémenter l'horloge de façon monotone, consultez clock_gettime(2).

Les macros opérant sur les structures timeval sont décrites dans timeradd(3).

VOIR AUSSI
date(1), adjtimex(2), clock_gettime(2), time(2), ctime(3), ftime(3), timeradd(3), capabilities(7), time(7), vdso(7), hwclock(8)

TRADUCTION
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 (https://www.gnu.org/licenses/gpl-3.0.html) 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.