先从一个 libev 的 demo 入手

最近想研究下 libev 这个网络库,所以先从官方文档一个最简单的 demo 开始,代码如下:

复制代码
//io.c
// a single header file is required
#include <ev.h>
#include <stdio.h> // for puts
// every watcher type has its own typedef'd struct
// with the name ev_TYPE
ev_io stdin_watcher;
ev_timer timeout_watcher;
// all watcher callbacks have a similar signature
// this callback is called when data is readable on stdin
static void stdin_cb (EV_P_ ev_io *w, int revents) {
    puts ("stdin ready");
    // for one-shot events, one must manually stop the watcher
    // with its corresponding stop function.
    ev_io_stop (EV_A_ w);
    // this causes all nested ev_run's to stop iterating
    ev_break (EV_A_ EVBREAK_ALL);
} 
// another callback, this time for a time-out
static void timeout_cb (EV_P_ ev_timer *w, int revents) {
    puts ("timeout");
    // this causes the innermost ev_run to stop iterating
    ev_break (EV_A_ EVBREAK_ONE);
} 

int main (void) {
    // use the default event loop unless you have special needs
    struct ev_loop *loop = EV_DEFAULT;
    // initialise an io watcher, then start it
    // this one will watch for stdin to become readable
    ev_io_init (&stdin_watcher, stdin_cb,
            /* STDIN_FILENO*/ 0, EV_READ);
    ev_io_start (loop, &stdin_watcher);
    // initialise a timer watcher, then start it
    // simple non-repeating 5.5 second timeout
    ev_timer_init (&timeout_watcher, timeout_cb, 5.5, 0.);
    ev_timer_start (loop, &timeout_watcher);
    // now wait for events to arrive
    ev_run (loop, 0);
    // break was called, so exit
    return 0;
}
复制代码

编译并运行:

gcc -c -o io.o io.c
gcc -o io io.o -lev

$ ./io 
$ timeout
$ ./io 
$
$ stdin ready

编译的时候需要链接 libev 动态库。

从上面可以看出,我是运行了这个程序两次。第一次是运行后就不再执行任何操作, 等待程序自己因为超时而结束。第二次就是按了一个回车,使 stdin 处于可读状态,触发了 io 事件, 程序也结束了。

可以说这代码非常容易理解,代码间的注视也是非常的详细。

以后会对 libev 的具体数据结果和实现进行分析。这个 demo 就到这里啦。


同步地址:http://www.fengbohello.top/code/libev-001

 

posted @   fengbohello  阅读(1200)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
历史上的今天:
2015-07-09 《自制编程语言》笔记:使用yacc与lex制作简单计算器
2015-07-09 使用diff制作补丁
点击右上角即可分享
微信分享提示