·全功能的事件循環基于epoll、kqueue、IOCP、event ports·異步的TCP和UDP套接字·異步的DNS解析·異步的文件和文件系統操作·文件系統事件·ANSI轉義代碼控制的TTY·PC包括套接字共享,使用Unix域套接字或有名管道(Windows)·子進程·線程池·信號處理·高分辨率時鐘·線程和同步原語
筆者是MacOS的系統,其他操作系統可以查看官方安裝文檔[4],接下下來介紹一下 libuv的安裝與使用。
1.下載libuv的源碼
git clone https://github.com/libuv/libuv.git
2.下載完成后進入項目,依次執行下面命令,進行編譯安裝,遇到問題 可以在libuv的ISSUE[5] 下尋找答案或者留言提問。
sh autogen.sh./configuremakemake checkmake install
3.安裝完成后,查看一下自己本地 /usr/local/include/ 下是否有uv.h等頭文件,如果存在即安裝完成。
4.查看靜態鏈接庫文件/usr/local/lib/libuv.a 是否存在。
下述示例默認有c語言環境,可以輸入gcc驗證一下,沒有c環境的話請搜索安裝gcc環境。這邊的hello world參考的文檔里推薦的入門示例[6]。
1.新建文件 main.c。
vim main.c
2.文件寫入如下內容。
// main.c
#include <stdlib.h>
#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;
}
3.如果提示沒有uv.h,可以試試下面的頭替代。
#include </usr/local/include/uv.h>
4.執行編譯鏈接命令。
gcc -o main main.c -luv或者gcc -o main main.c /usr/local/lib/libuv.a
5.執行可執行文件 ./main 進行驗證。
6.程序解釋:首先uv_loop_init開啟了一個loop,uv_run執行,但是loop是空的,沒有要處理的事件,然后很快uv_loop_close退出。
References
[1]
Projects that use libuv: https://github.com/libuv/libuv/wiki/Projects-that-use-libuv[2]
是一套操作系統 API 規范。一般而言,遵守 POSIX 規范的操作系統指的是 UNIX、Linux、Mac OS X 等: [3]
Windows 平臺上的內核事件通知相應的機制Input/Output Completion Port: [4]
安裝文檔: https://github.com/libuv/libuv#build-instructions[5]
ISSUE: https://github.com/libuv/libuv/issues[6]
入門示例: https://github.com/luohaha/Chinese-uvbook/blob/master/source/basics_of_libuv.md#hello-world