Advertisement
Guest User

Untitled

a guest
Jun 27th, 2019
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.78 KB | None | 0 0
  1. struct kevent events_to_monitor;
  2. struct kevent event_data;
  3. struct timespec timeout;
  4. unsigned int vnode_events;
  5. void *data = (void *) _filename.c_str();
  6. int kq;
  7. int event_fd;
  8.  
  9. event_fd = open(_filename.c_str(), O_EVTONLY);
  10. if (event_fd <=0) {
  11. fprintf(stderr, "The file %s could not be opened for monitoring. Error was %s.n", _filename.c_str(), strerror(errno));
  12. exit(-1);
  13. }
  14.  
  15. /* Open a kernel queue. */
  16. if ((kq = kqueue()) < 0) {
  17. fprintf(stderr, "Could not open kernel queue. Error was %s.n", strerror(errno));
  18. }
  19.  
  20. timeout.tv_sec = 0; // 0 seconds
  21. timeout.tv_nsec = 500000000; // 500 milliseconds
  22. vnode_events = NOTE_DELETE | NOTE_EXTEND | NOTE_WRITE | NOTE_ATTRIB;
  23. EV_SET( &events_to_monitor, event_fd, EVFILT_VNODE, EV_ADD | EV_CLEAR, vnode_events, 0, NULL);
  24.  
  25. while (1) {
  26. int event_count = kevent(kq, &events_to_monitor, NUM_EVENT_SLOTS, &event_data, 1, NULL);
  27. if ((event_count < 0) || (event_data.flags == EV_ERROR)) {
  28. /* An error occurred. */
  29. fprintf(stderr, "An error occurred (event count %d). The error was %s.n", event_count, strerror(errno));
  30. break;
  31. }
  32. if (event_count) {
  33. printf("Event %" PRIdPTR " occurred. Filter %d, flags %d, filter data %" PRIdPTR ", path %sn",
  34. event_data.ident,
  35. event_data.filter,
  36. event_data.flags,
  37. event_data.data,
  38. (char *) event_data.udata);
  39. } else {
  40. printf("No event.n");
  41. }
  42.  
  43. /* Reset the timeout. In case of a signal interrruption, the
  44. values may change. */
  45. timeout.tv_sec = 0; // 0 seconds
  46. timeout.tv_nsec = 500000000; // 500 milliseconds
  47. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement