C libevent2和文件io

C libevent2和文件io,c,file-io,asynchronous,libevent,C,File Io,Asynchronous,Libevent,我一直在玩弄libevent2,我可以读取文件,但它会阻塞。是否有任何方法可以使文件读取不只是在libevent中阻塞。或者,我是否需要为文件使用另一个IO库,并使其泵送我需要的事件 fd = open("/tmp/hello_world",O_RDONLY); evbuffer_read(buf,fd,4096); O_非块标志也不起作用。否 我还没有看到一个*nix,您可以在常规文件上执行非阻塞I/o,而不必求助于更特殊的方法(尽管对于一些,例如solaris,如果其他人持有文件锁,o_N

我一直在玩弄libevent2,我可以读取文件,但它会阻塞。是否有任何方法可以使文件读取不只是在libevent中阻塞。或者,我是否需要为文件使用另一个IO库,并使其泵送我需要的事件

fd = open("/tmp/hello_world",O_RDONLY);
evbuffer_read(buf,fd,4096);
O_非块标志也不起作用。

我还没有看到一个*nix,您可以在常规文件上执行非阻塞I/o,而不必求助于更特殊的方法(尽管对于一些,例如solaris,如果其他人持有文件锁,o_NONBLOCK会产生效果)


我还没有看到一个*nix,可以在常规文件上执行非阻塞I/o,而无需使用更特殊的方法(尽管对于某些人,例如solaris,如果其他人持有文件锁,o_NONBLOCK会产生效果)

在POSIX中,磁盘被视为“快速设备”,意味着它们总是阻塞(这就是o_NONBLOCK不适用于您的原因)。只有网络套接字可以是非阻塞的

有POSIX AIO,但在Linux上有一系列限制,使其不适合一般用途(仅适用于O_DIRECT,I/O必须与扇区对齐)


如果想将普通POSIX IO集成到异步事件循环中,人们似乎求助于线程池,其中阻塞的系统调用由一个工作线程在后台执行。这种库的一个例子是POSIX中的

,磁盘被认为是“快速设备”,这意味着它们总是阻塞(这就是为什么O_NONBLOCK不适用于您)。只有网络套接字可以是非阻塞的

有POSIX AIO,但在Linux上有一系列限制,使其不适合一般用途(仅适用于O_DIRECT,I/O必须与扇区对齐)


如果想将普通POSIX IO集成到异步事件循环中,人们似乎求助于线程池,其中阻塞的系统调用由一个工作线程在后台执行。此类库的一个示例是

请查看node.js/io.js使用的libuv:

它是libeio的一个很好的替代品,因为它在所有主要的操作系统上都表现良好,从Windows到bsd、macosx,当然还有Linux。 它支持I/O完成端口,如果您的目标是Windows,那么它比libeio更好


C代码也非常可读,我强烈推荐本教程:

请看一下node.js/io.js使用的libuv:

它是libeio的一个很好的替代品,因为它在所有主要的操作系统上都表现良好,从Windows到bsd、macosx,当然还有Linux。 它支持I/O完成端口,如果您的目标是Windows,那么它比libeio更好

C代码也非常可读,我强烈推荐本教程: