解冻并提交I / O.

时间:2011-11-15 20:53:55

标签: c++ c gcc libevent

libevent是否处理缓冲文件I / O?我知道它处理套接字相当不错,但它是否也涉及普通文件或者它是“仅”epoll/...包装器?

3 个答案:

答案 0 :(得分:1)

将libevent(或任何基础准备通知机制,例如epollkqueue)与普通文件描述符一起使用通常没有意义。例外是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 *中检索文件描述符。