libuv之helloworld

本文介绍了一个简单的libuv程序,展示了如何创建并运行一个事件循环。此外,还分享了编译过程中遇到的问题及解决方法。

让我们开始写第一个libuv程序吧!它什么都没做,只是开启了一个loop,然后很快地退出了。

#include <stdio.h>
#include <stdlib.h>
#include <uv.h>   //这是libuv非常重要的一个头文件,很多API都是在这里声明的,以及宏的声明

//这里ub.h注意我这里的写法与stdlib.h类似,因为我前面make install是默认安装的,也就是说都安装到系统/usr下面相应目录下了,所以这里编译器会自动去系统目录下找头文件,如果是自定义目录安装,那头文件要指明路径。


int main() {
    uv_loop_t *loop = malloc(sizeof(uv_loop_t));  //uv_loop_t是一个结构体类型,这里分配一段这个类型长度的空间
    uv_loop_init(loop); //初始化loop这个结构体


    printf("Now quitting.\n");
    uv_run(loop, UV_RUN_DEFAULT); //开始一个事件loop,第二个参数是模式,通常用DEFAULT这个,一般有3种可选:

/*

UV_RUN_DEFAUT:一直运行到没有激活的和被引用的句柄以及请求。如果uv_stop()被调用并且仍
有活动的handle或者requests,返回非0值。其他情况下返回0
·
UN_RUN_ONCE:轮询i/o一次。注意,如果没有等待的回调函数,本函数会阻塞。如果没有活动的
handles和rquests返回0,否则返回非0值。
·
UV_RUN_NOWAIT: 轮询i/o一次,但是如果没有等待的回调函数就不阻塞。如果没有剩下的活动
的handle以及requests,返回值0,否则非0,意味着需要在之后再次运行循环。
*/

    uv_loop_close(loop); //释放所有的循环内部的资源。只能在loop完成运行并且所有打开的handle以及requests已经被关闭,
否则会返回UV_EBUSY。当本函数返回之后,用户可以释放为loop分配的内存了。
    free(loop);
    return 0;
}


下面我编译时,加了一个linux下的线程库,其实编译上面这段Helloworld是不用加入线程的,这里只是说明一下我遇到的问题。

$ g++ -lpthread -o test test.o /usr/local/lib/libuv.a 
报很多关于pthread的错:
/usr/local/lib/libuv.a(libuv_la-thread.o): In function `uv_key_delete':
/home/jack/jack/libuv/src/unix/thread.c:562: undefined reference to `pthread_key_delete'
/usr/local/lib/libuv.a(libuv_la-thread.o): In function `uv_key_set':
/home/jack/jack/libuv/src/unix/thread.c:573: undefined reference to `pthread_setspecific'

原因是-lpthread要放在后面:
$ g++ -o test test.o /usr/local/lib/libuv.a -lpthread  //这里Libuv.a是用了静态库,也可以直接 -luv使用动态库

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JXES智能生态系统

如文章对你有用,请作者喝个咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值