libuv是一个轻量级的异步IO库,学习它这件事情已经打算好久了,那么从今天开始,我尝试使用libuv写一些教程性质的代码
1.下载与编译
从github上clone下源码,编译lib库。
> cd libuv/
> ./autogen.sh
> ./configure
> make
编译之后会在.libs文件夹存在libuv.a的库文件,当前根目录下有include头文件夹。
2.Hello World
#include <stdio.h>
#include <stdlib.h>
#include <uv.h>
int main() {
uv_loop_t *loop = malloc(sizeof(uv_loop_t));
uv_loop_init(loop);
printf("Now quitting.\n");
uv_run(loop, UV_RUN_DEFAULT);
uv_loop_close(loop);
free(loop);
return 0;
}
loop需要手动的分配空间,并在结束的时候释放空间。
uv_run用于运行主循环,但在主循环里面其实什么都没做就又跳出主循环了,简单讲一下为什么。
int uv_run(uv_loop_t* loop, uv_run_mode mode) {
int timeout;
int r;
int ran_pending;
r = uv__loop_alive(loop);
if (!r)
uv__update_time(loop);
while (r != 0 && loop->stop_flag == 0) {
....
}
....
return r;
}
此时loop里面都是空的,在uv__loop_alive函数中有如下判断:
static int uv__loop_alive(const uv_loop_t* loop) {
return uv__has_active_handles(loop) ||
uv__has_active_reqs(loop) ||
loop->closing_handles != NULL;
}
此时上面三个判断条件都不满足,因此r为0,不会进入while循环,直接跳出uv_run函数。
3.Reference
- An Introduction to libuv - http://nikhilm.github.io/uvbook/