def read(self, timeout=None, read_delay=None):
"""Read the inotify file descriptor and return the resulting list of
:attr:`~inotify_simple.Event` namedtuples (wd, mask, cookie, name).
Args:
timeout (int): The time in milliseconds to wait for events if
there are none. If `negative or `None``, block until there are
events.
read_delay (int): The time in milliseconds to wait after the first
event arrives before reading the buffer. This allows further
events to accumulate before reading, which allows the kernel
to consolidate like events and can enhance performance when
there are many similar events.
Returns:
list: list of :attr:`~inotify_simple.Event` namedtuples"""
# Wait for the first event:
pending = self._poller.poll(timeout)
if not pending:
# Timed out, no events
return []
if read_delay is not None:
# Wait for more events to accumulate:
time.sleep(read_delay/1000.0)
# How much data is available to read?
bytes_avail = ctypes.c_int()
ioctl(self.fd, FIONREAD, bytes_avail)
buffer_size = bytes_avail.value
# Read and parse it:
data = os.read(self.fd, buffer_size)
events = parse_events(data)
return events
评论列表
文章目录