Chinaunix首页 | 论坛 | 博客
  • 博客访问: 79308
  • 博文数量: 83
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 20
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-30 00:36
文章分类

全部博文(83)

文章存档

2014年(83)

我的朋友

分类: C/C++

2014-07-17 14:40:49

原文地址:kevent 作者:bjpiao


点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <sys/types.h>
  3. #include <sys/event.h>
  4. #include <sys/time.h>

  5. int main()
  6. {
  7.   int kq;
  8.   int n;
  9.   struct kevent event[1];
  10.   struct timespec ts;
  11.   FILE *filep;

  12.   filep = fopen("/home/huxw/test/michael", "r");
  13.   if (!filep) exit(1);

  14.   ts.tv_sec = 0; //设置ts
  15.   ts.tv_nsec = 0;
  16.  
  17.   // 做一个event.
  18.   EV_SET( &event[0], fileno(filep), EVFILT_VNODE,
  19.           EV_ADD,
  20.           NOTE_DELETE | NOTE_ATTRIB | NOTE_WRITE, 0, 0);

  21.   //产生一个queue
  22.   if ( (kq=kqueue()) < 0) exit(2);
  23.   
  24.   //在queue中注册event
  25.   if ( (n = kevent(kq, event, 1, NULL, 0, &ts) < 0) exit(3);

  26.   //ts为NULL, 相当于wait吧, 要poll的话可以还用之前的ts
  27.   n = kevent(kq, NULL, 0, event, 1, NULL);
  28.   if ( n == 0 ) {
  29.      printf("Nothing to do with it\n");
  30.   } else {
  31.     if (event->filter == EVFILT_VNODE && event->fflags == NOTE_DELETE) {
  32.        printf("deleting...\n");
  33.     }
  34.     else if (event->filter == EVFILT_VNODE && event->fflags == NOTE_ATTRIB) {
  35.        printf("attribution changed..\n");
  36.     }
  37.     else if (event->filter == EVFILT_VNODE && event->fflags == NOTE_WRITE) {
  38.        printf("write to it..\n");
  39.     }
  40.   }
  41.   return 0;
  42. }

阅读(467) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~