libev是用C语言编写的高性能、全功能事件循环库,支持select,poll模型,也支持linux特定的epoll模型,一个小巧、易用的库。
环境准备:ubuntu

一、libev库支持的功能

官方文档:http://pod.tst.eu/http://cvs.schmorp.de/libev/ev.pod
阅读官方文档,可以了解到libev支持事件循环和观察器。
事件循环
ev_loop //事件循环
观察器
ev_io //IO读写
ev_timer //定时器
ev_periodic //周期任务
ev_signal //信号处理
ev_child //子进程状态
ev_stat //文件属性变化
ev_async //激活线程
ev_fork //开辟进程
ev_embed //嵌入式事件循环
ev_idle //每次event loop空闲触发事件
ev_prepare //每次event loop之前事件
ev_check //每次event loop之后事件
ev_cleanup //event loop退出触发事件

二、libev库的编译和安装

libev的git仓库:https://github.com/enki/libev
1、新建一个libev_test目录,将libev-4.24.tgz文件放进去。
2、解压libev-4.24.tgz文件,并进入解压后的目录。
依次执行下面命令
./configure --prefix=$HOME"/test/libev_test/usr/local/"
make
make install
编译安装完后,对应的目录下有如下文件:

分别是头文件、动态库和man手册
交叉编译类似,需要修改编译链等。

三、libev库的使用例子

官方提供的代码示例,test.c放到libev_test目录下。

// a single header file is required
#include <ev.h>
// for puts
#include <stdio.h>// 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 iteratingev_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 iteratingev_break(EV_A_ EVBREAK_ONE);
}int main(void) {// use the default event loop unless you have special needsstruct ev_loop *loop = EV_DEFAULT;// initialise an io watcher, then start it// this one will watch for stdin to become readableev_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 timeoutev_timer_init(&timeout_watcher, timeout_cb, 5.5, 0.);ev_timer_start(loop, &timeout_watcher);// now wait for events to arriveev_run(loop, 0);// break was called, so exitreturn 0;
}

编译、链接
gcc test.c -o test -I usr/local/include/ -L usr/local/lib/ -lev

执行
./test
如果提示找不到库。
error while loading shared libraries: libev.so.4: cannot open shared object file: No such file or directory

则需要执行下面语句,设置一下环境变量。
export LD_LIBRARY_PATH=LDLIBRARYPATH:LD_LIBRARY_PATH:LDLIBRARYPATH:HOME"/test/libev_test/usr/local/lib"
执行结果
如果5.5s内stdin没有输入,则打印timeout,否则打印stdin ready。

PS:libev用于socket通信的例子可以参考下文:
https://www.cnblogs.com/dpf-10/p/5341200.html

libev库使用教程相关推荐

  1. python向量计算库教程_NumPy库入门教程:基础知识总结

    原标题:NumPy库入门教程:基础知识总结 视学算法 | 作者 知乎专栏 | 来源 numpy可以说是 Python运用于人工智能和科学计算的一个重要基础,近段时间恰好学习了numpy,pandas, ...

  2. 100多个Jupyter精选资源合集!GitHub高赞,包括项目、库、教程等11个方面

    点击上方,选择星标或置顶,不定期资源大放送! 阅读大概需要5分钟 Follow小博主,每天更新前沿干货 作者:乾明 转自:量子位 Jupyter,一个开源的Web应用程序,能在网页页面中直接编写代码. ...

  3. NodeJS 使用官方oracledb库连接数据库教程

    NodeJS 使用官方oracledb库连接数据库教程 导读 Linux下安装使用 gcc安装 nodejs安装 oracle客户端安装 npm安装oracledb测试连接 错误说明 windows下 ...

  4. 【STM32】HAL库 STM32CubeMX教程十五---FMC-SDRAM(二)

    前言: 本系列教程将HAL库与STM32CubeMX结合在一起讲解,使您可以更快速的学会各个模块的使用 上一讲我们说了CubeMX配置SDRAM的一些基本配置,还有FMC跟SDRAM的讲解,这一讲我们 ...

  5. 【STM32】HAL库 STM32CubeMX教程十五---FMC-SDRAM(一)

    前言: 本系列教程将HAL库与STM32CubeMX结合在一起讲解,使您可以更快速的学会各个模块的使用 本文 1首先讲解什么是FMC及SDRAM,W9825G6KH芯片原理,2基于CubeMx创建工程 ...

  6. 【STM32】HAL库 STM32CubeMX教程十四---SPI

    前言: 本系列教程将HAL库与STM32CubeMX结合在一起讲解,使您可以更快速的学会各个模块的使用 在我们的HAL库中,对硬件SPI函数做了很好的集成,使得之前SPI几百行代码,在HAL库中,只需 ...

  7. 【STM32】HAL库 STM32CubeMX教程十一---DMA (串口DMA发送接收)

    前言: 本系列教程将 对应外设原理,HAL库与STM32CubeMX结合在一起讲解,使您可以更快速的学会各个模块的使用 所用工具: 1.芯片: STM32F407ZET6/ STM32F103ZET6 ...

  8. 【STM32】HAL库 STM32CubeMX教程十---DAC

    前言: 本系列教程将 对应外设原理,HAL库与STM32CubeMX结合在一起讲解,使您可以更快速的学会各个模块的使用 所用工具: 1.芯片: STM32F407ZET6/ STM32F103ZET6 ...

  9. 单片机语音库文件_20天备战智能车之NXP库使用教程逐飞科技

    20天备战智能车之NXP库使用教程 距离比赛的时间又近了一天,今天逐飞为大家分享的是"逐飞开源库"的使用方法,从开源网站下载开源库到如何使用开源库做一个梳理,学会了开源库的使用,可 ...

最新文章

  1. 云栖回顾|首届阿里云云原生生态合作伙伴大会:与伙伴能力融合,加速企业数字创新
  2. Kettle使用_22 维度更新 缓慢变化维 拉链表
  3. web安全认证机制知多少
  4. java 执行外部命令 苹果_Java中执行外部命令
  5. spring框架(五)之JdbcTemplate基本使用
  6. 在线学ajax,ajax学习
  7. oracle树状排序,Oracle树状结构查询
  8. 检测c/c++中内存泄露
  9. 【Linux】虚拟服务器之LVS
  10. linux mysql5.7.12安装图解_centos 安装 mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz 详细步骤
  11. 安装libgl1-mesa-dri:i386重启后黑屏问题解决
  12. IMETool 输入法设置工具 十问十答
  13. excel数据库_EXCEL数据库函数dcount、dcounta
  14. css 鼠标变成小手
  15. python学习-day15:函数作用域、匿名函数、函数式编程、map、filter、reduce函数、内置函数r...
  16. 计算机原始图片大全,怎么判定图片是否PS过?又该如何找到原始图片?
  17. 葵花宝典第一招:唐氏均线成交量参数
  18. linux服务器被挖矿的解决办法
  19. m3u8 视频提取工具(下载web中的ts文件)
  20. springboot配置进行https请求访问demo

热门文章

  1. 开源走向世界(上):开源构建全球化的舞台丨BDTC 2021
  2. Angular5文件上传及进度报告、文件下载
  3. 用Python爬虫技术怎么挣点小钱,这四种方法可行
  4. QT从零开始作单片机上位机-串口调试助手+波形显示-实现串口模块的配置(2)
  5. Osgearth设置平面投影显示
  6. Photoshop 实例教程
  7. 51单片机c语言除法符号,单片机c语言教程:C51运算符和表达式
  8. java蜘蛛纸牌_Java课程设计——蜘蛛纸牌
  9. 具省电模式的小体积LCD段码液晶显示屏驱动IC-VK1S56D 14*4COM,可用于电池电量显示、美容仪、手持测温仪、家用除湿机、空气甲醛检测仪等液晶显示驱动-永嘉原*厂,可提供样品
  10. 用友云全新上线 企业服务都在这