libevent
是否处理缓冲文件I / O?我知道它处理套接字相当不错,但它是否也涉及普通文件或者它是“仅”epoll/...
包装器?
答案 0 :(得分:1)
将libevent(或任何基础准备通知机制,例如epoll
或kqueue
)与普通文件描述符一起使用通常没有意义。例外是NFS上的文件或使用eventfd
的内核AIO。
本地磁盘上的文件描述符始终准备就绪,总是有足够的缓冲区空间,操作总是“立即”完成。写入操作仅将数据复制到缓冲区高速缓存,并且实际写入磁盘发生... whenever it happens。 (请注意,此链接是特定于Linux的,但除了一些实现细节之外,它在其他系统上的工作方式相同)
答案 1 :(得分:0)
libevent不是一个epoll包装器。它选择了每个平台上可用的最高性能方法。
套接字也是文件描述符,因此你可以使用libevent for file io。
你需要禁用libevent的epoll使用。如果我没记错,Epoll不支持unix文件。
struct event_config *cfg = event_config_new();
event_config_avoid_method(cfg, "epoll");
答案 2 :(得分:0)
libevent位于比缓冲文件I / O更低的级别(使用stdio.h
得到的),直接使用文件描述符。你是正确的认为它只是一个epoll / select / kevent / etc包装器。其目的是侦听描述符上的事件,这是文件I / O的最低级别。但是,您可以将它与stdio.h
文件I / O库工具结合使用,因为它最终也会使用文件描述符。您可以使用fileno(3)
从您要等待的FILE *
中检索文件描述符。