29

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

通知

  • inotify_init(void)创建 inotify 实例以从中读取事件
  • inotify_add_watch(int fd, const char * path, int mask)在路径后面的文件节点周围返回一个 watch 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 会阻塞直到发生某些事情。

这个对吗?其他的区别是什么?

4

1 回答 1

37

最大的不同是 epoll 可以用于 ANY fd。这意味着它非常适合观察所有类型的数据通信方式。套接字、IPC、文件、打印机……任何东西。inotify 仅适用于文件系统。

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

事实上,inotify 返回一个文件描述符——这意味着您可以使用 epoll 来确定您应该在哪个 inotify FD 上调用 read。所以两者在某种程度上是齐头并进的。

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

于 2013-06-20T07:45:28.343 回答