inotify和epoll之间的区别

bod*_*ser 23 c c++ linux epoll inotify

我想知道i/o观察者inotifyepoll之间的区别是什么?

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会阻止事件发生.

它是否正确?还有什么其他差异?

博多

xax*_*xon 26

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

但是,由于inotify特定于文件系统,因此您可以接收有关各种特定于文件系统的属性的通知,例如文件属性和正在读取的文件.这些东西不可能通过epoll实现.

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

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

  • 这并不完全正确,因为 epoll 实际上并不适用于文件 fd,尽管它可能可以。有关详细信息,请参阅“常规文件上的 Epoll” (3认同)