GETTIMEOFDAY(2) Manuel du programmeur Linux GETTIMEOFDAY(2)
NOM
gettimeofday, settimeofday - Lire / écrire l'heure
actuelle.
SYNOPSIS
#include <sys/time.h>
#include <unistd.h>
int gettimeofday(struct timeval *tv, struct timezone *tz);
int settimeofday(const struct timeval *tv , const struct
timezone *tz);
DESCRIPTION
gettimeofday et settimeofday peuvent programmer l'heure
ainsi que le fuseau horaire (timezone). tv est une struc
ture timeval décrite dans /usr/include/sys/time.h :
struct timeval {
int tv_sec; /* secondes */
int tv_usec; /* microsecondes */
};
et tz est une structure timezone décrite egalement dans
/usr/include/sys/time.h:
struct timezone {
int tz_minuteswest; /* minutes west of Greenwich */
int tz_dsttime; /* type de changement horaire */
};
L'utilisation de la structure timezone est obsolète, le
champ tz_dsttime n'a jamais été utilisé sous Linux, il n'a
jamais été géré, et ne le sera jamais par la libc ou
glibc. Toute occurrence de ce champ dans les sources du
noyau (sauf pour les déclarations) est un bug. Ainsi le
paragraphe suivant n'a qu'un intérêt historique.
Le champ tz_dsttime contient une constante symbolique
(dont les valeurs sont fournies ci-dessous) qui indique
quelle partie du changement horaire annuel est en cours.
(Remarque : Cette valeur est constante tout au long de
l'année, elle n'indique pas réellement la valeur horaire
en cours, elle sélectionne un algorithme). Les change
ments horaires (Daylight saving - DST) sont définis comme
suit :
DST_NONE /* Aucun */
DST_USA /* USA */
DST_AUST /* Australie */
DST_WET /* Europe occidentale */
DST_MET /* Europe centrale */
DST_EET /* Europe Orientale */
DST_CAN /* Canada */
Linux 28 Avril 1998 1
GETTIMEOFDAY(2) Manuel du programmeur Linux GETTIMEOFDAY(2)
DST_GB /* Grande Bretagne et Irlande */
DST_RUM /* Roumanie */
DST_TUR /* Turkie */
DST_AUSTALT /* Australie avec décalage en 1986 */
Il est évident que le décallage horaire en cours ne peut
pas être uniquement fourni par un algorithme par pays. Ce
décallage dépend de décisions politiques imprévisibles.
Ainsi cette méthode des fuseaux horaires a été abandonnée.
Sous Linux, durant un appel à settimeofday le champ
tz_dsttime doit être nul.
Sous Linux, il existe une sémantique particulière associée
à l'appel système settimeofday si, durant la première
invocation (après le boot), il a un argument tz non-NULL,
un argument tv NULL et un champ tz_minuteswest différent
de zéro. Dans ce cas, on suppose que l'horloge CMOS de la
machine est configurée sur le temps local, et que l'on
doit l'augmenter de cette valeur pour obtenir le temps
UTC. Bien entendu, il faut éviter autant que possible
d'utiliser cette particularité.
Les macros suivantes permettent de manipuler les struc
tures timeval :
#define timerisset(tvp)\
((tvp)->tv_sec || (tvp)->tv_usec)
indique si le timer est non-nul.
#define timercmp(tvp, uvp, cmp)\
((tvp)->tv_sec cmp (uvp)->tv_sec ||\
(tvp)->tv_sec == (uvp)->tv_sec &&\
(tvp)->tv_usec cmp (uvp)->tv_usec)
compare deux timers.
#define timerclear(tvp)\
((tvp)->tv_sec = (tvp)->tv_usec = 0)
efface un timer
Si tv ou tz est nulle, la structure correspondante n'est
ni programmée ni renvoyée.
Seul le Super-User peut appeler settimeofday.
VALEUR RENVOYÉE
gettimeofday et settimeofday renvoient 0 s'ils réussis
sent, ou -1 s'ils échouent, auquel cas errno contient le
code d'erreur.
ERREURS
EPERM settimeofday est appelé par quelqu'un d'autre que
le Super-User
EINVAL le fuseau horaire est invalide. EFAULT tv ou tz
pointent en dehors de l'espace d'adressage
Linux 28 Avril 1998 2
GETTIMEOFDAY(2) Manuel du programmeur Linux GETTIMEOFDAY(2)
autorisé.
CONFORMITÉ
SVr4, BSD 4.3
VOIR AUSSI
date(1), adjtimex(2), time(2), ctime(3), ftime(3)
TRADUCTION
Christophe Blaess, 1997.
Linux 28 Avril 1998 3