【问题标题】:Difference between inotify and epollinotify 和 epoll 的区别
【发布时间】:2013-06-16 23:10:34
【问题描述】:

我想知道 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_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 会阻塞直到发生某些事情。

这是正确的吗?还有什么区别?

【问题讨论】:

    标签: c++ c linux epoll inotify


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 谢谢你这回答了我的问题。在 epoll 旁边是 linux 只有 poll 无处不在(我认为)
    • 我认为如果您设置了多个 fd,您可以使用 epoll(或 poll 或 select)找出何时读取由 inotify 创建的任何 fd,这很酷。我可以看到有人这样做是为了监视一些基本目录,然后根据该基本目录中的变化设置条件监视。
    • 作为参考,从版本 11 开始,FreeBSD 的 Linux 兼容层已经添加了对 epoll 的支持。(ref)
    • 这并不完全正确,因为 epoll 实际上并不适用于文件 fd,尽管它可能可以。有关详细信息,请参阅“对常规文件进行 Epoll”
    猜你喜欢
    • 2020-01-02
    • 2011-05-04
    • 2011-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多