
您可以使用timerfd_create(2)创建一个计时器,然后
TFD_TIMER_CANCEL_ON_SET在设置它时用选项标记它。将其设置为将来不可行的时间,然后在其上进行阻止(使用轮询/选择等)-如果系统时间更改,则计时器将被取消,您可以检测到。
(这是systemd的工作方式)
例如:
#include <sys/timerfd.h>#include <limits.h>#include <stdio.h>#include <unistd.h>#include <errno.h>int main(void) { int fd = timerfd_create(CLOCK_REALTIME, 0); timerfd_settime(fd, TFD_TIMER_ABSTIME | TFD_TIMER_CANCEL_ON_SET, &(struct itimerspec){ .it_value = { .tv_sec = INT_MAX } }, NULL); printf("Waitingn"); char buffer[10]; if (-1 == read(fd, &buffer, 10)) { if (errno == ECANCELED) printf("Timer cancelled - system clock changedn"); else perror("error"); } close(fd); return 0;}欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)