libevent
处理缓冲文件I/O吗?我知道它处理套接字很好,但它是否也关注普通文件,或者它"只是"一个epoll/...
包装器?
使用libevent(或任何潜在的准备就绪通知机制,例如epoll
或kqueue
)与正常的文件描述符通常没有意义。例外情况是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 *
中检索文件描述符。