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