Tag: libuv

库在os x上编译libuv?

我正在尝试学习一些libuv,似乎有一本很棒的书可以通过它。 但是,这本书没有解释如何实际编译它。 我在github上提取的代码上运行make,并使用github( https://github.com/joyent/libuv )中描述的GYP编译。 但是我不确定我需要包含哪些库才能获得编译代码。 我试着编译这段代码: /* first.c */ #include #include int main() { uv_loop_t *loop = uv_loop_new(); printf(“Now quitting.\n”); uv_run(loop, UV_RUN_DEFAULT); return 0; } 我使用libuv文件夹中的以下命令编译它: gcc -o first first.c build/Release/libuv.a 我得到了以下缺少的符号: Undefined symbols for architecture x86_64: “_CFArrayCreate”, referenced from: _uv__fsevents_init in libuv.a(fsevents.o) “_CFRunLoopAddSource”, referenced from: _uv__cf_loop_runner in libuv.a(darwin.o) “_CFRunLoopGetCurrent”, referenced from: _uv__cf_loop_runner in […]

UV_RUN_NOWAIT模式如何在libuv中工作?

使用uv_run函数在libuv中运行事件循环时,会出现一个与以下值一起使用的“mode”参数: UV_RUN_DEFAULT UV_RUN_ONCE UV_RUN_NOWAIT 前两个是显而易见的。 UV_RUN_DEFAULT运行事件循环,直到没有更多事件,并且UV_RUN_ONCE处理来自循环的单个事件。 但是, UV_RUN_NOWAIT似乎不是一个单独的模式,而是一个可以与其他两个值之一进行OR运算的标志。 默认情况下,此函数会阻塞,直到事件处理UV_RUN_NOWAIT ,并且UV_RUN_NOWAIT使其无阻塞,但我可以在其上找到的任何文档都在那里结束。 我的问题是,如果你运行事件循环非阻塞,如何处理回调? libuv事件模型是单线程的(reactor模式),所以我假设它需要阻塞才能调用回调,但如果主线程被占用,事件处理后会发生什么? 在libuv再次控制主线程之前,回调是否会“排队”? 或者是否会在另一个线程上调度回调?

变量声明,使用libuv

我正在尝试学习如何使用libuv。 我在Mac OS X上并下载并安装了库。 我可以编译并运行小型测试程序,只启动一个回调循环,然后退出,因为没有观察者,另一个创建一个空闲的观察者,并在时间用完时退出。 我一直试图通过文件io的样本,并遇到了问题。 获取文件描述符的函数的函数原型是: int uv_fs_open(uv_loop_t* loop, uv_fs_t* req, // second argument const char* path, int flags, int mode, uv_fs_cb cb) 我已将示例代码缩减到仍然有错误的min。 #include #include uv_fs_t open_req; void on_open(uv_fs_t); void on_read(uv_fs_t); void on_write(uv_fs_t); int main(int argc, char **argv) { uv_fs_open(uv_default_loop(), &open_req, argv[1], O_RDONLY, 0, on_open); uv_run(uv_default_loop(), UV_RUN_DEFAULT); return 0; } void on_open(uv_fs_t *req) […]

为什么stdout缓冲?

我正在尝试学习libuv api并编写以下测试: #include #include #include void timer_cb(uv_timer_t* timer) { int* i = timer->data; –*i; if(*i == 0) { uv_timer_stop(timer); } printf(“timer %d\n”, *i); //fflush(stdout); } int main() { uv_loop_t* loop = uv_default_loop(); uv_timer_t* timer = malloc(sizeof(uv_timer_t)); uv_timer_init(loop, timer); int i = 5; timer->data = &i; uv_timer_start(timer, timer_cb, 1000, 2000); uv_run(loop, UV_RUN_DEFAULT); printf(“Now quitting.\n”); uv_close(timer, 0); […]

libuv undefined对uv_loop_new的引用

编译后,我试图运行libuv示例程序: #include #include int main() { uv_loop_t *loop = uv_loop_new(); printf(“Now quitting.\n”); uv_run(loop, UV_RUN_DEFAULT); return 0; } 但是,当尝试运行时,我收到以下错误: **/tmp/ccHTpspB.o: In function `main’: main.c:(.text+0x9): undefined reference to `uv_loop_new’ main.c:(.text+0x28): undefined reference to `uv_run’ collect2: error: ld returned 1 exit status** 我哪里做错了 ? PS:它不适用于#include“uv.h”