46 lines
1.3 KiB
Python
46 lines
1.3 KiB
Python
import math
|
|
import ctypes
|
|
from .clib_lookup import CLIBLookup
|
|
|
|
class timespec(ctypes.Structure):
|
|
_fields_ = [("sec", ctypes.c_long), ("nsec", ctypes.c_long)]
|
|
__slots__ = [name for name,type in _fields_]
|
|
|
|
@classmethod
|
|
def from_seconds(cls, secs):
|
|
c = cls()
|
|
c.seconds = secs
|
|
return c
|
|
|
|
@property
|
|
def seconds(self):
|
|
return self.sec + self.nsec / 1000000000
|
|
|
|
@seconds.setter
|
|
def seconds(self, secs):
|
|
x, y = math.modf(secs)
|
|
self.sec = int(y)
|
|
self.nsec = int(x * 1000000000)
|
|
|
|
|
|
class itimerspec(ctypes.Structure):
|
|
_fields_ = [("interval", timespec),("value", timespec)]
|
|
__slots__ = [name for name,type in _fields_]
|
|
|
|
@classmethod
|
|
def from_seconds(cls, interval, value):
|
|
spec = cls()
|
|
spec.interval.seconds = interval
|
|
spec.value.seconds = value
|
|
return spec
|
|
|
|
|
|
# function timerfd_create
|
|
timerfd_create = CLIBLookup("timerfd_create", ctypes.c_int, (ctypes.c_long, ctypes.c_int))
|
|
|
|
# function timerfd_settime
|
|
timerfd_settime = CLIBLookup("timerfd_settime", ctypes.c_int, (ctypes.c_int, ctypes.c_int, ctypes.POINTER(itimerspec), ctypes.POINTER(itimerspec)))
|
|
|
|
# function timerfd_gettime
|
|
timerfd_gettime = CLIBLookup("timerfd_gettime", ctypes.c_int, (ctypes.c_int, ctypes.POINTER(itimerspec)))
|