code: def read_events(self):
          
          buf_ = array.array('i', [0])
          # get event queue size
          if fcntl.ioctl(self._fd, termios.FIONREAD, buf_, 1) == -1:
              return
          queue_size = buf_[0]
          if queue_size < self._threshold:
              log.debug('(fd: %d) %d bytes available to read but threshold is '
                        'fixed to %d bytes', self._fd, queue_size,
                        self._threshold)
              return
  
          try:
              # Read content from file
              r = os.read(self._fd, queue_size)
          except Exception, msg:
              raise NotifierError(msg)
          log.debug('Event queue size: %d', queue_size)
          rsum = 0  # counter
          while rsum < queue_size:
              s_size = 16
              # Retrieve wd, mask, cookie and fname_len
              wd, mask, cookie, fname_len = struct.unpack('iIII',
                                                          r[rsum:rsum+s_size])
              # Retrieve name
              fname, = struct.unpack('%ds' % fname_len,
                                     r[rsum + s_size:rsum + s_size + fname_len])
              rawevent = _RawEvent(wd, mask, cookie, fname)
              if self._coalesce:
                  # Only enqueue new (unique) events.
                  raweventstr = str(rawevent)
                  if raweventstr not in self._eventset:
                      self._eventset.add(raweventstr)
                      self._eventq.append(rawevent)
              else:
                  self._eventq.append(rawevent)
              rsum += s_size + fname_len
docs: Read events from device, build _RawEvents, and enqueue them.