table of contents
gettimeofday(2) | System Calls Manual | gettimeofday(2) |
NAAM¶
gettimeofday, settimeofday - verkrijg / zet tijd
BIBLIOTHEEK¶
Standard C bibliotheek (libc, -lc)
SAMENVATTING¶
#include <sys/time.h>
int gettimeofday(struct timeval *restrict tv, struct timezone *restrict tz); int settimeofday(const struct timeval *tv, const struct timezone *_NULL_baartz);
settimeofday()
Vanaf glibc 2.19:
_DEFAULT_SOURCE
Glibc 2.19 en eerder:
_BSD_SOURCE
BESCHRIJVING¶
De functies gettimeofday() en settimeofday() kunnen zowel de tijd als de tijdzone zetten en inspecteren.
Het tv argument is een timeval "struct" zoals bepaald in <sys/time.h>):
struct timeval {
time_t tv_sec; /* seconden */
suseconds_t tv_usec; /* microseconden */ };
en geeft het aantal seconden en microseconden sinds de Epoch (zie time(2)).
Het tz argument is een struct tijdzone:
struct timezone {
int tz_minuteswest; /* minuten west van Greenwich */
int tz_dsttime; /* type zomertijd (dst) correctie */ };
Als óf tv óf tz NULL is, dan wordt de corresponderende structure niet gezet of teruggegeven. (Echter, compilatie waarschuwingen zullen optreden als tv NULL is.)
Het gebruik van de tijdzone structuur is verouderd; het tz argument moet normaliter opgegeven worden als NULL. (Zie OPMERKINGEN hieronder.)
Onder Linux is er een eigenaardige `warp clock' semantiek geassocieerd met de settimeofday() systeem aanroep als tijdens de allereerste aanroep (na opstarten van het systeem) die een niet-NULL tz argument heeft, het tv argument NULL is en het tz_minuteswest niet-nul is. (Het tz_dsttime veld moet nul zijn in dit geval.) In zo'n geval wordt aangenomen dat de CMOS klok op lokale tijd staat, en dat daar deze hoeveelheid bij moet worden opgeteld om de UTC systeem tijd te krijgen. Ongetwijfeld is het een slecht idee dit te gebruiken.
EIND WAARDE¶
gettimeofday() en settimeofday() retourneren 0 bij succes, of -1 voor falen (in welk geval errno op die manier wordt gezet).
FOUTEN¶
- EFAULT
- Een van tv of tz wijst buiten uw toegankelijke adres ruimte.
- EINVAL
- (settimeofday()): timezone is ongeldig.
- EINVAL
- (settimeofday()): tv.tv_sec is negatief of tv.tv_usec is buiten het bereik [0..999,999].
- EINVAL (sinds Linux 4.3)
- (settimeofday()): Een poging werd ondernomen om de tijd op een waarde in te stellen die eerder is dan de huidige waarde van de CLOCK_MONOTONIC klok (zie clock_gettime(2)).
- EPERM
- Het huidige proces heeft onvoldoende rechten om settimeofday() aan te roepen; onder Linux is de CAP_SYS_TIME capaciteit vereist.
VERSIES¶
C library/kernel verschillen¶
Op sommige architecturen wordt voorzien in een implementatie van gettimeofday() in de vdso(7).
De kernel accepteert NULL voor zowel tv and tz. Het tijdzone argument wordt genegeerd door glibc en musl, en niet doorgegeven naar/van de kernel. De bionic van Android geeft het tijdzone argument naar/van de kernel door, maar Android past het tijdzone in de kernel niet aan op basis van de tijdzone van het apparaat in Instellingen, daarom is de tijdzone van de kernel typisch UTC.
VOLDOET AAN¶
- gettimeofday()
- POSIX.1-2008 (verouderd).
- settimeofday()
- Geen.
GESCHIEDENIS¶
SVr4, 4.3BSD. POSIX.1-2001 beschrijven gettimeofday() maar niet settimeofday(). POSIX.1-2008 markeert gettimeofday() als verouderd, en beveelt het gebruik van clock_gettime(2) in plaats daarvan aan.
Traditioneel waren de velden van struct timeval van het type long.
Het tz_dsttime veld¶
In een niet-Linux kernel, met glibc, wordt het tz_dsttime veld van struct timezone gezet op een niet-nul waarde door gettimeofday() als op de huidige tijdzone een regel ooit toegepast is of ooit zal worden. Op deze manier spiegelt het precies de betekenis van daylight(3) voor de huidige zone. Op Linux, met glibc, is de instelling van het tz_dsttime veld van struct timezone nooit gebruikt door settimeofday() of gettimeofday(). Daarom is het volgende puur uit historische interesse.
Op oude systemen bevat het tz_dsttime veld een symbolische constante (waarden staan hieronder) dat aangeeft in welk deel van het jaar zomertijd van kracht is. (Let op: deze waarde is constant gedurende het jaar: het geeft niet aan dat de zomertijd van kracht is, het selecteert een algoritme.) De zomertijd algoritmes zijn als volgt gedefinieerd:
DST_NONE /* geen zomertijd */ DST_USA /* USA stijl zomertijd */ DST_AUST /* Australische stijl zomertijd */ DST_WET /* West Europese zomertijd */ DST_MET /* Midden Europese zomertijd */ DST_EET /* Oost Europese zomertijd */ DST_CAN /* Canada */ DST_GB /* Groot Britannië en Ierland */ DST_RUM /* Roemenië */ DST_TUR /* Turkije */ DST_AUSTALT /* Australische stijl met verschuiving in 1986 */
Natuurlijk bleek dat de periode waarin zomertijd geld niet met een eenvoudig algorithme per land bepaald kan worden. Inderdaad: deze periode wordt bepaald door onvoorspelbare politieke beslissingen. Daarom is deze methode van tijdzone representatie afgeschaft.
OPMERKINGEN¶
De tijd teruggegeven door gettimeofday() wordt beïnvloed door niet continue sprongen in de systeem tijd (b.v. als de systeem beheerder handmatig de systeem tijd verandert). Als u een monotoon oplopende klok nodig heeft, zie dan clock_gettime(2).
Macros voor het gebruik van timeval structuren zijn beschreven in timeradd(3).
ZIE OOK¶
date(1), adjtimex(2), clock_gettime(2), time(2), ctime(3), ftime(3), timeradd(3), capabilities(7), time(7), vdso(7), hwclock(8)
VERTALING¶
De Nederlandse vertaling van deze handleiding is geschreven door Jos Boersema <joshb@xs4all.nl>, Joost van Baal <joostv-manpages-nl-2398@mdcc.cx>, Mario Blättermann <mario.blaettermann@gmail.com> en Luc Castermans <luc.castermans@gmail.com>
Deze vertaling is vrije documentatie; lees de GNU General Public License Version 3 of later over de Copyright-voorwaarden. Er is geen AANSPRAKELIJKHEID.
Indien U fouten in de vertaling van deze handleiding zou vinden, stuur een e-mail naar debian-l10n-dutch@lists.debian.org.
2 mei 2024 | Linux man-pages (unreleased) |