Index général des pages de man   Index Section man 2   Table des Matières de settimeofday   Imprime la page de man settimeofday en mode Texte   Recherche dans les pages de man   Page de man en français      Fonctions du système (section 2)

settimeofday

 
  

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 structure 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 changements 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 */
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 structures 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éussissent, 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 autorisé.

Conformité

SVr4, BSD 4.3

Voir Aussi

date(1) , adjtimex(2) , time(2) , ctime(3) , ftime(3)

Traduction

Christophe Blaess, 1997.


Table des matières


Haut de page

© 1996-2000 Adaptation française "Christophe Blaess"