epoll 只能用于网络通信 ?还是也能用于监控文件系统

2020-09-02 15:44:48 +08:00
 black11black

如题,之前一篇帖子的衍生话题,里面大佬回复说 epoll 无法用于监控文件,原帖地址:

https://v2ex.com/t/697642#reply21

想搞清一下具体是怎么回事。

个人没编写过这么底层的代码,了解 epoll 大概原理我觉得我懂的已经比身边很多同事多了,但是我也只了解到 epoll 基于监控文件描述符实现,那么按照我的理解 linux 里一切都是文件,那他就适用于所有系统啊,为啥有大佬说 epoll 只能用于网络,不能用于监控文件?

805 次点击
所在节点    问与答
3 条回复
wellsc
2020-09-02 16:09:34 +08:00
不是吧,只是监听 socket 的场景比较多
monsterxx03
2020-09-02 17:41:13 +08:00
不能用于文件, 会拿到一个 EPERM error.

man epoll_ctl: EPERM The target file fd does not support epoll. This error can occur if fd refers to, for example, a regular file or a directory.

为啥不支持? 因为 file 就没有 non-blocking 的概念...真正的异步 IO 要用 aio. nodejs 的那个 readFile 也是个*假*异步

一切皆文件只是个大的设计方向, 不代表所有 fd 支持的操作都一样, 不然怎么会有 ioctl 呢...
black11black
2020-09-08 23:23:19 +08:00
@monsterxx03 感谢,大佬能讲一下 linux 文件没有 nonblocking 的话都是怎么读取的吗,所以全都是阻塞的,排队执行指令?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/703556

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX