inotify和epoll之间的区别

时间:2013-06-20 07:34:39

标签: c++ c linux epoll inotify

我想知道i / o观察者 inotify epoll 之间有什么区别?

inotify的

  • inotify_init(void)创建inotify实例以从
  • 读取事件
  • inotify_add_watch(int fd,const char * path,int mask)在路径后面的文件节点周围返回一个手表fd
  • inotify_rm_watch(int fd,int wd)停止观看有关fd的事件

epoll的

  • epoll_create(void)创建epoll对象
  • epoll_ctl(int epfd,int op,int fd,struct epoll_event * event)设置要监视的事件
  • epoll_wait(int epfd,struct epoll_event * events,int maxevents,int timeout); 阻止直到事件发生

所以在文件观看方面似乎有不同的方法。 Inotify尝试让用户决定何时收集事件,而epoll会阻止事件发生。

这是对的吗?还有什么不同之处?

博多

1 个答案:

答案 0 :(得分:25)

最大的区别是epoll可以用于任何fd。这意味着它可以用于查看所有类型的数据通信方式。套接字,IPC,文件,打印机......任何东西。 inotify仅适用于文件系统。

但是,由于inotify特定于文件系统,因此您可以接收有关各种特定于文件系统的属性的通知,例如文件属性和正在读取的文件。 epoll无法做到这些。

实际上,inotify返回一个文件描述符 - 这意味着你可以使用epoll来确定你应该调用哪个inotify FD。所以这两者在某种程度上是相辅相成的。

http://en.wikipedia.org/wiki/Inotify