Next: linux signalfd, Previous: linux resources, Up: linux [Index]
For details on the API we should refer to the following manual pages:
epoll(7), epoll_create(2), epoll_ctl(2),
epoll_wait(2). The following bindings are exported by the
(vicare linux) library.
Interfaces to the C language functions epoll_create() and
epoll_create1(). Open an epoll descriptor and return it as
fixnum. When size is not used: it defaults to 16. If an
error occurs: raise an exception.
Interface to the C language function epoll_ctl(). Control
interface for an epoll descriptor. Return unspecified values. If an
error occurs: raise an exception.
epfd is the return value of a previous call to
epoll-create. op is a fixnum representing an OR
combination of flags: EPOLL_CTL_ADD, EPOLL_CTL_MOD,
EPOLL_CTL_DEL. fd is a fixnum representing the file
descriptor subject of the action. event is a pointer object
referencing a struct epoll_event; when event is #f or
not used: it defaults to the NULL pointer.
Interface to the C language function epoll_wait(). Wait for an
I/O event on an epoll descriptor. Return a fixnum representing the
number of file descriptors ready for the requested events; the return
value is zero if no file descriptors are ready. If an error occurs:
raise an exception.
epfd is the return value of a previous call to
epoll-create. event is a poiner object referencing an
array of struct epoll_event holding maxevents entries;
maxevents is a non–negative fixnum. timeout-ms is an exact
integer in the range of a C language int, it represents a timeout
time in milliseconds; when set to -1 causes the call to block
until at least one file descriptor is ready.
To allow for faster operations, the struct epoll_event instances
handled by the epoll functions are meant to be allocated on raw memory.
Allocate with malloc() an array of struct epoll_event
capable of holding number-of-entries structures. If successful
return a pointer object, else raise an exception.
Return the number of bytes needed to hold an instance of struct
epoll_event.
Mutator and accessor for the field events of the struct
epoll_event entry at index.
Mutator and accessor for the field data.ptr of the struct
epoll_event entry at index.
Mutator and accessor for the field data.fd of the struct
epoll_event entry at index.
Mutator and accessor for the field data.u32 of the struct
epoll_event entry at index.
Mutator and accessor for the field data.u4 of the struct
epoll_event entry at index.
Here is a meaningless example showing the mechanics of the epoll API:
(import (vicare)
(prefix (vicare linux)
linux.)
(prefix (vicare posix)
px.)
(vicare platform constants)
(vicare language-extensions syntaxes))
(let-values (((in ou) (px.pipe)))
(unwind-protect
(let ((epfd (linux.epoll-create)))
(unwind-protect
(let ((sizeof-struct (vector (linux.epoll-event-size))))
(with-local-storage sizeof-struct
(lambda (event)
(linux.epoll-event-set-events! event 0 EPOLLIN)
(linux.epoll-event-set-data-fd! event 0 in)
(linux.epoll-ctl epfd EPOLL_CTL_ADD in event)))
(px.write ou '#vu8(1))
(with-local-storage sizeof-struct
(lambda (events)
(linux.epoll-wait epfd events 1 -1)
(linux.epoll-event-ref-data-fd events 0) ⇒ in
(linux.epoll-event-ref-events events 0) ⇒ EPOLLIN
))))
(px.close epfd)))
(px.close in)
(px.close ou))
Next: linux signalfd, Previous: linux resources, Up: linux [Index]