.\" -*- coding: UTF-8 -*- .\" Copyright 2008, Michael Kerrisk .\" Copyright, the authors of the Linux man-pages project .\" .\" SPDX-License-Identifier: GPL-2.0-or-later .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH timerfd_create 2 "8. februar 2026" "Linux man\-pages 6.17" .SH NAVN timerfd_create, timerfd_settime, timerfd_gettime \- stopure der påminder via fildeskriptorer .SH BIBLIOTEK Standard C library (\fIlibc\fP,\ \fI\-lc\fP) .SH SYNOPSIS .nf \fB#include \fP .P \fBint timerfd_create(int \fP\fIclockid\fP\fB, int \fP\fIflag\fP\fB);\fP .P \fBint timerfd_settime(int \fP\fIfd\fP\fB, int \fP\fIflag\fP\fB,\fP \fB const struct itimerspec *\fP\fIny_værdi\fP\fB,\fP \fB struct itimerspec *_Nullable \fP\fIgl_værdi\fP\fB);\fP \fBint timerfd_gettime(int \fP\fIfd\fP\fB, struct itimerspec *\fP\fInuv_værdi\fP\fB);\fP .fi .SH BESKRIVELSE Disse systemkald opretter og fungerer på et stopur, der leverer påmindelser om udløb for stopure via en fildeskriptor. De tilbyder et alternativ til brugen af \fBsetitimer\fP(2) eller \fBtimer_create\fP(2), med den fordel at fildeskriptoren kan overvåges af \fBselect\fP(2), \fBpoll\fP(2) og \fBepoll\fP(7). .P .\" Brugen af disse tre systemkald er analog til brugen af \fBtimer_create\fP(2), \fBtimer_settime\fP(2) og \fBtimer_gettime\fP(2). (Der er ingen analog for \fBtimer_getoverrun\fP(2) da den funktionalitet tilbydes af \fBread\fP(2), som beskrevet nedenfor). .SS timerfd_create() \fBtimerfd_create\fP() opretter et nyt stopurobjekt og returnerer en fildeskriptor, der referer til det stopur. Argumentet \fIclockid\fP angiver uret, der bruges til at markere status for stopuret, og skal være en af de følgende: .TP \fBCLOCK_REALTIME\fP Et realtids ur, der kan angives for hele systemet. .TP \fBCLOCK_MONOTONIC\fP Et monotont stigende ur, der ikke kan indstilles og som måler tid fra et uangivet punkt i fortiden, der ikke ændrer sig efter systemets opstartstidspunkt. .TP \fBCLOCK_BOOTTIME\fP (siden Linux 3.15) .\" commit 4a2378a943f09907fb1ae35c15de917f60289c14 Som \fBCLOCK_MONOTONIC\fP, er dette et monotont stigende ur. Hvor \fBCLOCK_MONOTONIC\fP ikke måler tiden mens et system er i dvale, så inkluderer \fBCLOCK_BOOTTIME\fP tiden hvor systemet er i dvale. Dette er nyttigt for programmer, der skal være dvale\-opmærksomme. \fBCLOCK_REALTIME\fP er ikke egnet for sådanne programmer, da uret påvirkes af diskontinuerlige ændringer til systemuret. .TP \fBCLOCK_REALTIME_ALARM\fP (siden Linux 3.11) .\" commit 11ffa9d6065f344a9bd769a2452f26f2f671e5f8 Dette ur er som \fBCLOCK_REALTIME\fP, men vil vække systemet, hvis det er i dvale. Kalderen skal have funktionaliteten \fBCAP_WAKE_ALARM\fP for at angive et stopur mod dette ur. .TP \fBCLOCK_BOOTTIME_ALARM\fP (siden Linux 3.11) .\" commit 11ffa9d6065f344a9bd769a2452f26f2f671e5f8 Dette ur er som \fBCLOCK_BOOTTIME\fP, men vil vække systemet, hvis det er i dvale. Kalderen skal have funktionaliteten \fBCAP_WAKE_ALARM\fP for at kunne angive et stopur mod dette ur. .P Se \fBclock_getres\fP(2) for yderligere detaljer om ovenstående ure. .P Den nuværende værdi af hver af disse ure kan indhentes via \fBclock_gettime\fP(2). .P Startende med Linux 2.6.27 kan de følgende værdier blive bit\-vis ORed i \fIflag\fP for at ændre opførelsen for \fBtimerfd_create\fP(): .TP 14 \fBTFD_NONBLOCK\fP Angiv filstatusflaget \fBO_NONBLOCK\fP på den åbne filbeskrivelse (se \fBopen\fP(2)) refereret til af den nye fildeskriptor. Brug af dette flag forhindrer ekstra kald til \fBfcntl\fP(2) for at opnå det samme resultat. .TP \fBTFD_CLOEXEC\fP Angiv flaget close\-on\-exec (\fBFD_CLOEXEC\fP) på den nye fildeskriptor. Se beskrivelsen af flaget \fBO_CLOEXEC\fP i \fBopen\fP(2) for årsagerne til hvorfor dette kan være nyttigt. .P I Linuxversioner op til og inklusive 2.6.26 skal \fIflag\fP være angivet som nul. .SS timerfd_settime() \fBtimerfd_settime\fP() bevæbner (starter) eller afvæbner (stopper) stopuret refereret til af fildeskriptoren \fIfd\fP. .P Arguementet \fIny_værdi\fP angiver det oprindelige udløb og interval for stopuret. Strukturen \fIitimerspec\fP brugt for dette argument er beskrevet i \fBitimerspec\fP(3type). .P \fInew_value.it_value\fP angiver det oprindelige udløb for stopuret, i sekunder og nanosekunder. Angivelse af et af felterne i \fInew_value.it_value\fP til en værdi anderledes end nul bevæbner stopuret. Angivelse af begge felter i \fInew_value.it_value\fP til nul afvæbner stopuret. .P Angivelse af et eller begge felter i \fInew_value.it_interval\fP til værdier forskellige fra nul angiver perioden, i sekunder og nanosekunder, for gentagne stopursudløb efter det oprindelige udløb. Hvis begge felter i \fInew_value.it_interval\fP er nul, så udløber stopuret bare en gang, på tidspunktet angivet af \fInew_value.it_value\fP. .P Som standard fortolkes den oprindelige udløbstid angivet i \fIny_værdi\fP relativ til den nuværende tid på stopurets ur på tidspunktet for kaldet (dvs. \fInew_value.it_value\fP angiver en tid relativ til den nuværende værdi for uret angivet af \fIclockid\fP). Et absolut tidsudløb kan vælges via argumentet \fIflag\fP. .P Argumentet \fIflag\fP er en bit\-maske, der kan inkludere de følgende værdier: .TP \fBTFD_TIMER_ABSTIME\fP Fortolk \fInew_value.it_value\fP som en absolut værdi på stopurets ur. Stopuret vil udløbe når værdien af stopurets ur når værdien angivet i \fInew_value.it_value\fP. .TP \fBTFD_TIMER_CANCEL_ON_SET\fP Hvis dette flag er angivet med \fBTFD_TIMER_ABSTIME\fP og uret for dette stopur er \fBCLOCK_REALTIME\fP eller \fBCLOCK_REALTIME_ALARM\fP, så marker dette stopur som om det kan afbestilles hvis realtidsuret har en diskontinuerlig ændring (\fBsettimeofday\fP(2), \fBclock_settime\fP(2) eller lignende). Når sådanne ændringer opstår vil en nuværende eller fremtidig \fBread\fP(2) fra fildeskriptoren fejle med fejlbeskeden \fBECANCELED\fP. .P .\" Hvis argumentet \fIgl_værdi\fP ikke er NULL, så bruges strukturen \fIitimerspec\fP der peges på til at returnere indstillingen for stopuret, der var gyldig på tidspunktet for kaldet; se beskrivelsen af \fBtimerfd_gettime\fP() der følger. .SS timerfd_gettime() \fBtimerfd_gettime\fP() returnerer, i \fInuv_værdi\fP, en \fIitimerspec\fP\-struktur der indheolder den nuværende indstilling for stopuret refereret til af fildeskriptoren \fIfd\fP. .P Feltet \fIit_value\fP returnerer tidsintervallet indtil stopuret næste gang udløber. Hvis begge felter for denne struktur er nul, så er stopuret afvæbnet. Dette felt indeholder en relativ værdi, uanset om flaget \fBTFD_TIMER_ABSTIME\fP var angivet da stopuret blev indstillet. .P Feltet \fIit_interval\fP returnerer intervallet for stopuret. Hvis begge felter for denne struktur er nul, så er stopuret sat til at udløb bare en gang, på tidspunktet angivet af \fIcurr_value.it_value\fP. .SS "Operationer på et stopurs fildeskriptor" Fildeskriptoren returneres af \fBtimerfd_create\fP() understøtter de følgende yderligere operationer: .TP \fBread\fP(2) Hvis stopuret allerede er udløbet en eller flere gange siden dets indstillinger sidst blev ændret via \fBtimerfd_settime\fP(), eller siden den sidste succesfulde \fBread\fP(2), så returnerer mellemlageret angivet til \fBread\fP(2) et ej underskrevet 8\-byte heltal (\fIuint64_t\fP) indeholdende antallet af udløb, der er opstået. (Den returnerede værdi er i vært\-byterækkefølge\[em]det vil sige, byte\-standardrækkefølgen for heltal på værtsmaskinen). .IP Hvis intet stopurudløb er sket på tidspunktet for \fBread\fP(2), så blokerer kaldet enten det næste stopursudløb eller fejler med den følgende fejlbesked \fBEAGAIN\fP hvis fildeskriptoren er gjort ikkeblokerende (via brugen af \fBfcntl\fP(2) \fBF_SETFL\fP\-operationen til at angive flaget \fBO_NONBLOCK\fP). .IP En \fBread\fP(2) fejler med fejlbeskeden \fBEINVAL\fP hvis størrelsen for det angivne mellemlager er mindre end 8 byte. .IP Hvis det associerede ur er enten \fBCLOCK_REALTIME\fP eller \fBCLOCK_REALTIME_ALARM\fP, er stopuret absolut (\fBTFD_TIMER_ABSTIME\fP) og flaget \fBTFD_TIMER_CANCEL_ON_SET\fP var angivet da \fBtimerfd_settime\fP() blev kaldet, så fejler \fBread\fP(2) med fejlbeskeden \fBECANCELED\fP hvis realtidsuret har en diskontinuerlig ændring. (Dette gør det muligt for det læsende program at registrere sådanne diskontinuerlige ændringer til uret). .IP Hvis det associerede ur er enten \fBCLOCK_REALTIME\fP eller \fBCLOCK_REALTIME_ALARM\fP, er stopuret absolut (\fBTFD_TIMER_ABSTIME\fP) og flaget \fBTFD_TIMER_CANCEL_ON_SET\fP \fIikke\fP var angivet da \fBtimerfd_settime\fP() blev kaldt, så kan en diskontinuerlig negativ ændring til uret (f.eks. \fBclock_settime\fP(2)) få \fBread\fP(2) til at fjerne blokering, men returnere en værdi på 0 (dvs. ingen byte læst), hvis ur\-ændringen opstår efter tiden udløb, men før \fBread\fP(2) på fildeskriptoren. .TP \fBpoll\fP(2) .TQ \fBselect\fP(2) .TQ (og lignende) Fildeskriptoren kan læses (argumentet \fBselect\fP(2) \fIreadfds\fP; flaget \fBpoll\fP(2) \fBPOLLIN\fP) hvis en ellere flere stopursudløb er opstået. .IP Fildeskriptoren understøtter også de andre fil\-deskriptor multiplexing\-API'er: \fBpselect\fP(2), \fBppoll\fP(2) og \fBepoll\fP(7). .TP \fBioctl\fP(2) Den følgende timerfd\-specifikke kommando er understøttet: .RS .TP \fBTFD_IOC_SET_TICKS\fP (siden Linux 3.17) .\" commit 5442e9fbd7c23172a1c9bc736629cd123a9923f0 Juster antallet af stopursudløb der er opstået. Argumentet er en peger til et 8\-byte heltal forskellige fra nul (\fIuint64_t\fP*) indeholdende det nye antal udløb. Når antallet er angivet, vil en eventuel tjener på stopuret blive vækket. Det eneste formål med denne kommando er at gendanne udløbene til tjekpunkt/gendannelse. Denne operation er kun tilgængelig hvis kernen blev konfigureret med tilvalget \fBCONFIG_CHECKPOINT_RESTORE\fP. .RE .TP \fBclose\fP(2) .\" Når fildeskriptoren ikke længere er krævet, så bør den lukkes. Når alle fildeskriptorer associeret med det samme stopursobjekt er blevet lukket, så afvæbnes stopuret og dets ressurcer frigives af kernen. .SS fork(2)\-semantik .\" Efter en \fBfork\fP(2) arver underprocessen en kopi af fildeskriptoren oprettet af \fBtimerfd_create\fP(). Fildeskriptoren refererer til det samme underliggende stopursobjekt som den tilsvarende fildeskriptor i overprocessen, og \fBread\fP(2)'er i underprocessen vil returnere information om udløb for stopuret. .SS execve(2)\-semantik En fildeskriptor oprettet af \fBtimerfd_create\fP() bevares på tværs af \fBexecve\fP(2), og fortsætter med at oprette stopursudløb hvis stopuret var bevæbnet. .SH RETURVÆRDI Ved succes, returnerer \fBtimerfd_create\fP() en ny fildeskriptor. Ved fejl, returneres \-1 og \fIerrno\fP angives for at indikere fejlen. .P \fBtimerfd_settime\fP() og \fBtimerfd_gettime\fP() returnerer 0 ved succes; ved fejl returnerer de \-1, og angiver \fIerrno\fP for at indikere fejlen. .SH FEJL \fBtimerfd_create\fP() kan fejle med de følgende fejlbeskeder: .TP \fBEINVAL\fP \fIclockid\fP er ikke gyldig. .TP \fBEINVAL\fP \fIflag\fP er ugyldig; eller, i Linux 2.6.26 eller tidligere, \fIflag\fP er forskellig fra nul. .TP \fBEMFILE\fP Begrænsningen per proces for antallet af åbne fildeskriptorer er blevet nået. .TP \fBENFILE\fP Systemets begrænsning på det samlede antal åbne filer er nået. .TP \fBENODEV\fP Kunne ikke montere (intern) anonym iknude\-enhed. .TP \fBENOMEM\fP Der var utilstrækkelige kernehukommelse til at oprette stopuret. .TP \fBEPERM\fP \fIclockid\fP var \fBCLOCK_REALTIME_ALARM\fP eller \fBCLOCK_BOOTTIME_ALARM\fP men kalderen havde ikke funktionaliteten \fBCAP_WAKE_ALARM\fP. .P \fBtimerfd_settime\fP() og \fBtimerfd_gettime\fP() kan fejle med de følgende fejl: .TP \fBEBADF\fP \fIfd\fP er ikke en gyldig filbeskrivelse. .TP \fBEFAULT\fP \fIny_værdi\fP, \fIgl_værdi\fP eller \fInuv_værdi\fP er ikke en gyldig peger. .TP \fBEINVAL\fP \fIfd\fP er ikke en gyldig timerfd\-fildeskriptor. .P \fBtimerfd_settime\fP() kan også fejl med de følgende fejl: .TP \fBECANCELED\fP Se NOTER. .TP \fBEINVAL\fP \fIny_værdi\fP er ikke korrekt initialiseret (en af \fItv_nsec\fP falder udenfor intervallet nul til 999.999.999). .TP \fBEINVAL\fP .\" This case only checked since Linux 2.6.29, and Linux 2.2.2[78].some-stable-version. .\" In older kernel versions, no check was made for invalid flags. \fIflag\fP er ugyldig. .SH STANDARDER Linux. .SH HISTORIK Linux 2.6.25, glibc 2.8. .SH NOTER Hvis vi antager det følgende scenarie for \fBCLOCK_REALTIME\fP\- eller \fBCLOCK_REALTIME_ALARM\fP\-stopuret, der blev oprettet med \fBtimerfd_create\fP(): .IP (1) 5 Stopuret er blevet startet (\fBtimerfd_settime\fP()) med \fBTFD_TIMER_ABSTIME\fP\- og \fBTFD_TIMER_CANCEL_ON_SET\fP\-flagene; .IP (2) En ej fortsættende ændring (f.eks. \fBsettimeofday\fP(2)) er efterfølgende lavet på \fBCLOCK_REALTIME\fP\-uret; og .IP (3) kalderen kaldte igen \fBtimerfd_settime\fP() for at bevæbne stopuret (uden først at lave en \fBread\fP(2) på fildeskriptoren). .P I dette tilfælde sker der det følgende: .IP \[bu] 3 \fBtimerfd_settime\fP() returnerer \-1 med \fIerrno\fP angivet til \fBECANCELED\fP. (Dette gør det muligt for kalderen at vide at det tidligere stopur var påvirket af en ej fortsættende ændring til uret). .IP \[bu] Stopuret \fIer bevæbnet med succes\fP med indstillingerne angivet i det andet \fBtimerfd_settime\fP()\-kald. (Dette var sandsynligvis et implementeringsuheld, men vil ikke blive rettet nu, i tilfælde af at der er programmer, der afhænger af denne opførelse). .SH FEJL .\" 2.6.29 I øjeblikket understøtter \fBtimerfd_create\fP() færre typer af ur\-id'er end \fBtimer_create\fP(2). .SH EKSEMPLER Det følgende program opretter et stopur og overvåger så dets status. Programmet accepterer op til tre kommandolinjeargumenter. Det første argument angiver antallet af sekunder for et oprindelige udløb for stopuret. Det andet argument angiver intervallet for stopuret, i sekunder. Det tredje argument angiver antallet af gange programmet bør tillade at stopuret udløber før afslutning. Det andet og det tredje kommandolinjeargument er valgfrie. .P Den følgende skalsession demonstrerer brugen af programmet: .P .in +4n .EX $\fB a.out 3 1 100\fP 0.000: timer started 3.000: read: 1; total=1 4.000: read: 1; total=2 \fB\[ha]Z \fP # tast control\-Z for at suspendere programmet [1]+ Stopped ./timerfd3_demo 3 1 100 $ \fBfg\fP # Genoptag afvikling efter nogle få sekunder a.out 3 1 100 9.660: read: 5; total=7 10.000: read: 1; total=8 11.000: read: 1; total=9 \fB\[ha]C \fP # tast control\-C for at suspendere programmet .EE .in .SS Programkilde .\" SRC BEGIN (timerfd_create.c) \& .EX .\" The commented out code here is what we currently need until .\" the required stuff is in glibc .\" .\" .\"/* Link with \-lrt */ .\"#define _GNU_SOURCE .\"#include .\"#include .\"#include .\"#if defined(__i386__) .\"#define __NR_timerfd_create 322 .\"#define __NR_timerfd_settime 325 .\"#define __NR_timerfd_gettime 326 .\"#endif .\" .\"static int .\"timerfd_create(int clockid, int flags) .\"{ .\" return syscall(__NR_timerfd_create, clockid, flags); .\"} .\" .\"static int .\"timerfd_settime(int fd, int flags, struct itimerspec *new_value, .\" struct itimerspec *curr_value) .\"{ .\" return syscall(__NR_timerfd_settime, fd, flags, new_value, .\" curr_value); .\"} .\" .\"static int .\"timerfd_gettime(int fd, struct itimerspec *curr_value) .\"{ .\" return syscall(__NR_timerfd_gettime, fd, curr_value); .\"} .\" .\"#define TFD_TIMER_ABSTIME (1 << 0) .\" .\"//////////////////////////////////////////////////////////// #include #include #include #include #include #include #include #include \& static void print_elapsed_time(void) { int secs, nsecs; static int first_call = 1; struct timespec curr; static struct timespec start; \& if (first_call) { first_call = 0; if (clock_gettime(CLOCK_MONOTONIC, &start) == \-1) err(EXIT_FAILURE, "clock_gettime"); } \& if (clock_gettime(CLOCK_MONOTONIC, &curr) == \-1) err(EXIT_FAILURE, "clock_gettime"); \& secs = curr.tv_sec \- start.tv_sec; nsecs = curr.tv_nsec \- start.tv_nsec; if (nsecs < 0) { secs\-\-; nsecs += 1000000000; } printf("%d.%03d:\[rs]t", secs, (nsecs + 500000) / 1000000); } \& int main(int argc, char *argv[]) { int fd; ssize_t s; uint64_t expir, tot_expir, max_expir; struct timespec now; struct itimerspec new_value; \& if (argc != 2 && argc != 4) { fprintf(stderr, "%s init\-secs [interval\-secs max\-num\-expir]\[rs]n", argv[0]); exit(EXIT_FAILURE); } \& if (clock_gettime(CLOCK_REALTIME, &now) == \-1) err(EXIT_FAILURE, "clock_gettime"); \& /* Opret et CLOCK_REALTIME\-absolut stopur med oprindelig udløb og interval som angivet på kommandolinjen. */ \& new_value.it_value.tv_sec = now.tv_sec + atoi(argv[1]); new_value.it_value.tv_nsec = now.tv_nsec; if (argc == 2) { new_value.it_interval.tv_sec = 0; max_expir = 1; } else { new_value.it_interval.tv_sec = atoi(argv[2]); max_expir = atoi(argv[3]); } new_value.it_interval.tv_nsec = 0; \& fd = timerfd_create(CLOCK_REALTIME, 0); if (fd == \-1) err(EXIT_FAILURE, "timerfd_create"); \& if (timerfd_settime(fd, TFD_TIMER_ABSTIME, &new_value, NULL) == \-1) err(EXIT_FAILURE, "timerfd_settime"); \& print_elapsed_time(); printf("timer started\[rs]n"); \& for (tot_expir = 0; tot_expir < max_expir;) { s = read(fd, &expir, sizeof(uint64_t)); if (s != sizeof(uint64_t)) err(EXIT_FAILURE, "read"); \& tot_expir += expir; print_elapsed_time(); printf("read: %" PRIu64 "; total=%" PRIu64 "\[rs]n", expir, tot_expir); } \& exit(EXIT_SUCCESS); } .EE .\" SRC END .SH "SE OGSÅ" \fBeventfd\fP(2), \fBpoll\fP(2), \fBread\fP(2), \fBselect\fP(2), \fBsetitimer\fP(2), \fBsignalfd\fP(2), \fBtimer_create\fP(2), \fBtimer_gettime\fP(2), \fBtimer_settime\fP(2), \fBtimespec\fP(3), \fBepoll\fP(7), \fBtime\fP(7) .PP .SH OVERSÆTTELSE Oversættere af denne manual til dansk Joe Hansen . .PP Denne oversættelse er gratis dokumentation; læs .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License version 3 .UE eller nyere for ophavsretbetingelser. Der er INGEN ANSVAR. .PP Hvis du støder på fejl i oversættelsen af ​​denne vejledning, skal du sende en besked til .MT debian-l10n-danish@lists.debian.org .ME .