Libevent and file I/O



libevent处理缓冲文件I/O吗?我知道它处理套接字很好,但它是否也关注普通文件,或者它"只是"一个epoll/...包装器?

使用libevent(或任何潜在的准备就绪通知机制,例如epollkqueue)与正常的文件描述符通常没有意义。例外情况是NFS上的文件或使用eventfd内核AIO的文件。

本地磁盘上的文件描述符总是准备好,总是有足够的缓冲空间,操作总是"立即"完成。写操作只是将数据复制到缓冲缓存中,而实际的对磁盘的写发生在…无论何时发生。(注意,这个链接是linux专用的,但除了可能有一些实现细节之外,它在其他系统上的工作方式是一样的)

libevent不是epoll包装器。它选择每个平台上可用的最高性能方法。

套接字也是文件描述符,因此您应该能够对文件io使用libevent。

你需要禁用libevent的epoll使用。如果我没记错,Epoll不支持unix文件。

struct event_config *cfg = event_config_new();
event_config_avoid_method(cfg, "epoll");

libevent直接使用文件描述符,位于比缓冲文件I/O (stdio.h)更低的级别。你认为它"只是"一个epoll/select/kevent/etc包装器是正确的。它的目的是监听描述符上的事件,这是文件I/O的最低级别。但是,您可以将它与stdio.h文件I/O库工具结合使用,因为它最终也会使用文件描述符。您可以使用fileno(3)从您想要等待的FILE *中检索文件描述符。

相关内容

  • 没有找到相关文章

最新更新