zoukankan      html  css  js  c++  java
  • 先从一个 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

  • 相关阅读:
    4.2 面向对象分析(二) CRC方法标识概念类
    4.1 面向对象分析(二) 标识概念类和对象
    3.4 面向对象分析(一)面向对象设计(初步)
    3.3 面向对象分析(一)分析模型法
    3.2 面向对象分析(一)名词法
    3.1 面向对象分析与设计概览
    2.7 UML状态图
    2.6 通信图
    2.5 UML顺序图
    2.4 UML类图
  • 原文地址:https://www.cnblogs.com/fengbohello/p/7140186.html
Copyright © 2011-2022 走看看