Linux-FD
view release on metacpan or search on metacpan
lib/Linux/FD.xs view on Meta::CPAN
if (ret == -1) {
if (errno == EAGAIN)
XSRETURN_EMPTY;
else
die_sys("Couldn't write to eventfd: %s");
}
RETVAL = value;
OUTPUT:
RETVAL
MODULE = Linux::FD PACKAGE = Linux::FD::Signal
SV* new(const char* classname, sigset_t* sigmask, ...)
PREINIT:
int i, flags = SFD_CLOEXEC;
CODE:
for (i = 2; i < items; i++)
flags |= get_signal_flag(ST(i));
RETVAL = new_signalfd(classname, sigmask, flags);
OUTPUT:
RETVAL
void set_mask(Fd fd, sigset_t* sigmask)
CODE:
if(signalfd(fd, sigmask, 0) == -1)
die_sys("Couldn't set_mask: %s");
struct signalfd_siginfo receive(Fd fd)
PREINIT:
int tmp;
CODE:
do {
tmp = read(fd, &RETVAL, sizeof(RETVAL));
} while (interrupted(tmp));
if (tmp == -1) {
if (errno == EAGAIN)
XSRETURN_EMPTY;
else
die_sys("Couldn't read from signalfd: %s");
}
OUTPUT:
RETVAL
MODULE = Linux::FD PACKAGE = Linux::FD::Timer
SV* new(const char* classname, SV* clock, ...)
PREINIT:
int i, flags = TFD_CLOEXEC;
CODE:
for (i = 2; i < items; i++)
flags |= get_timer_flag(ST(i));
RETVAL = new_timerfd(classname, clock, flags, "Linux::FD::Timer->new");
OUTPUT:
RETVAL
void get_timeout(Fd timerfd)
PREINIT:
struct itimerspec value;
PPCODE:
if (timerfd_gettime(timerfd, &value) == -1)
die_sys("Couldn't get_timeout: %s");
mXPUSHn(timespec_to_nv(&value.it_value));
if (GIMME_V == G_ARRAY)
mXPUSHn(timespec_to_nv(&value.it_interval));
SV* set_timeout(Fd timerfd, struct timespec new_value, struct timespec new_interval = NEVER, bool abstime = FALSE)
PREINIT:
struct itimerspec new_itimer, old_itimer;
PPCODE:
new_itimer.it_value = new_value;
new_itimer.it_interval = new_interval;
if (timerfd_settime(timerfd, (abstime ? TIMER_ABSTIME : 0), &new_itimer, &old_itimer) == -1)
die_sys("Couldn't set_timeout: %s");
mXPUSHn(timespec_to_nv(&old_itimer.it_value));
if (GIMME_V == G_ARRAY)
mXPUSHn(timespec_to_nv(&old_itimer.it_interval));
IV receive(Fd timerfd)
PREINIT:
uint64_t buffer;
int ret;
CODE:
do {
ret = read(timerfd, &buffer, sizeof buffer);
} while (interrupted(ret));
if (ret == -1) {
if (errno == EAGAIN)
XSRETURN_EMPTY;
else
die_sys("Couldn't read from timerfd: %s");
}
RETVAL = buffer;
OUTPUT:
RETVAL
void clocks(SV* classname)
INIT:
int i;
PPCODE:
for (i = 0; i < sizeof clocks / sizeof *clocks; ++i)
mXPUSHp(clocks[i].key, clocks[i].length);
( run in 1.983 second using v1.01-cache-2.11-cpan-71847e10f99 )