Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Timere

În laborator ni se solicită trimiterea unui mesaj periodic. Pentru a realzia acest lucru vom folosi API-ul de timerfd din Linux.

Timerfd este un file descriptor și este creat folosind timerfd_create. Functia timerfd_settime îi setează intervalul la care să ne anunțe (1 secunda in acest caz).

#include <sys/time.h>
#include <sys/timerfd.h>

int timerfd;
timerfd = timerfd_create(CLOCK_REALTIME,  0);

struct itimerspec spec;     
spec.it_value.tv_sec = 1;    
spec.it_value.tv_nsec = 0;    
spec.it_interval.tv_sec = 1;    
spec.it_interval.tv_nsec = 0;    
timerfd_settime(timerfd, 0, &spec, NULL);    

Daca facem read pe timerfd, acesta se va bloca până când va expira timpul setat de timerfd_settime() (în cazul acesta o secundă).

uint64_t count;
read(timerfd, &count, sizeof(count));

Astfel, când read s-a deblocat, înseamnă că timpul a expirat, iar valoarea de tipul uint64_t citită va fi egală cu numărul de ori de care a expirat timmer-ul, de la ultima resetare (ex. pentru timmer-ul de o secundă, după 1 minut, valoarea va fi 60).