Struct nix::sys::timerfd::TimerFd
pub struct TimerFd { /* fields hidden */ }
Documentation
A timerfd instance. This is also a file descriptor, you can feed it to other interfaces consuming file descriptors, epoll for example.
Implementations
impl TimerFd
pub fn new(clockid: ClockId, flags: TimerFlags) -> Result<Self>
Creates a new timer based on the clock defined by clockid
. The
underlying fd can be assigned specific flags with flags
(CLOEXEC,
NONBLOCK). The underlying fd will be closed on drop.
pub fn set(
&Self,
expiration: Expiration,
flags: TimerSetTimeFlags
) -> Result<()>
&Self,
expiration: Expiration,
flags: TimerSetTimeFlags
) -> Result<()>
Sets a new alarm on the timer.
Types of alarm
There are 3 types of alarms you can set:
-
one shot: the alarm will trigger once after the specified amount of time. Example: I want an alarm to go off in 60s and then disables itself.
-
interval: the alarm will trigger every specified interval of time. Example: I want an alarm to go off every 60s. The alarm will first go off 60s after I set it and every 60s after that. The alarm will not disable itself.
-
interval delayed: the alarm will trigger after a certain amount of time and then trigger at a specified interval. Example: I want an alarm to go off every 60s but only start in 1h. The alarm will first trigger 1h after I set it and then every 60s after that. The alarm will not disable itself.
Relative vs absolute alarm
If you do not set any TimerSetTimeFlags
, then the TimeSpec
you pass
to the Expiration
you want is relative. If however you want an alarm
to go off at a certain point in time, you can set TFD_TIMER_ABSTIME
.
Then the one shot TimeSpec and the delay TimeSpec of the delayed
interval are going to be interpreted as absolute.
Disabling alarms
Note: Only one alarm can be set for any given timer. Setting a new alarm actually removes the previous one.
Note: Setting a one shot alarm with a 0s TimeSpec disables the alarm altogether.
pub fn get(&Self) -> Result<Option<Expiration>>
Get the parameters for the alarm currently set, if any.
Trait Implementations
impl Debug for TimerFd
fn fmt(&Self, f: &mut $crate::fmt::Formatter<'_>) -> $crate::fmt::Result
impl FromRawFd for TimerFd
unsafe fn from_raw_fd(fd: RawFd) -> Self
Auto Trait Implementations
impl RefUnwindSafe for TimerFd
impl UnwindSafe for TimerFd
Blanket Implementations
impl<T> BorrowMut<T> for T
where
T: ?Sized,
where
T: ?Sized,
fn borrow_mut(&mut Self) -> &mut T