A simple wrapper for kqueue VNODE (for now) functionality to be asyncio compatible.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

46 lines
867 B

  1. #
  2. # Test to figure out how to trigger the event.
  3. #
  4. # Key points:
  5. # CLEAR is needed if you want to reset things
  6. # fp.flush is needed otherwise kernel does not see the write
  7. #
  8. import select
  9. kq = select.kqueue()
  10. print('begining')
  11. with open('somefile.txt', 'w+') as fp, open('somefile.txt', 'r') as rfp:
  12. print('fno:', fp.fileno())
  13. print('rfno:', rfp.fileno())
  14. kevent = select.kevent(rfp, select.KQ_FILTER_VNODE, flags=select.KQ_EV_ADD|select.KQ_EV_ENABLE|select.KQ_EV_CLEAR|0x40, fflags=select.KQ_NOTE_EXTEND)
  15. r = kq.control([ kevent ], 1, 0)
  16. print(repr(r))
  17. fp.write('foo!')
  18. fp.flush()
  19. r = kq.control([], 1, 0)
  20. print('r:', repr(r))
  21. print('rfp.tell:', rfp.tell())
  22. print('rfp.read:', repr(rfp.read()))
  23. r = kq.control([], 1, 0)
  24. print(repr(r))
  25. fp.write('foo!')
  26. fp.flush()
  27. r = kq.control([], 1, 0)
  28. print(repr(r))
  29. print('fp.tell:', fp.tell())