Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C libuv:如何在出现错误时优雅地退出应用程序?_C_Exit_Nonblocking_Libuv - Fatal编程技术网

C libuv:如何在出现错误时优雅地退出应用程序?

C libuv:如何在出现错误时优雅地退出应用程序?,c,exit,nonblocking,libuv,C,Exit,Nonblocking,Libuv,我有一个使用libuv库的应用程序。它运行默认循环: uv_run(uv_default_loop()); 如果出现故障,应用程序如何正常退出?目前,我正在执行以下示例中的操作: uv_tcp_t* tcp = malloc(sizeof(uv_tcp_t)); int r = uv_tcp_init(uv_default_loop(), tcp); if (r) { free(tcp); uv_loop_delete(default_loop); exit(EXIT_FAILU

我有一个使用libuv库的应用程序。它运行默认循环:

uv_run(uv_default_loop());
如果出现故障,应用程序如何正常退出?目前,我正在执行以下示例中的操作:

uv_tcp_t* tcp = malloc(sizeof(uv_tcp_t));
int r = uv_tcp_init(uv_default_loop(), tcp);

if (r) {
  free(tcp);
  uv_loop_delete(default_loop);
  exit(EXIT_FAILURE);
}
是否应调用
uv\u loop\u delete
函数?它有什么作用?它是否删除所有挂起的回调函数?它是否关闭所有当前打开的TCP连接?我必须在退出前手动完成吗


注意:无法添加标签“libuv”(低于1500)。有人可以创建并添加它吗?

uv\u loop\u delete的声明是,源代码是。看起来是这样的:

void uv_loop_delete(uv_loop_t* loop) {
  uv_ares_destroy(loop, loop->channel);
  ev_loop_destroy(loop->ev);
#if __linux__
  if (loop->inotify_fd == -1) return;
  ev_io_stop(loop->ev, &loop->inotify_read_watcher);
  close(loop->inotify_fd);
  loop->inotify_fd = -1;
#endif
#if HAVE_PORTS_FS
  if (loop->fs_fd != -1)
    close(loop->fs_fd);
#endif
}
它将有效地清理所有可能清理的文件描述符。它将关闭TCP连接、Inotify连接、用于读取事件的套接字、管道FD等

=>是,此函数将关闭通过libuv打开的所有内容


注意:不管怎样,当你的应用程序退出时,你的操作系统会清理并关闭你打开的所有东西,不会有任何怜悯

请编辑libuv的描述,我不是100%确定libuv的意思。谢谢!编辑。你能看一下吗?这里看不到可能是因为我保存描述时stackoverflow崩溃了。现在它没有显示编辑wiki的链接。下面是我添加的摘录和说明:摘录:“node.js的平台层”说明:“libuv是node.js的平台层。它的目的是在Windows和Unix系统上抽象IOCP。它最终将包含此库中的所有平台差异。[github上的libuv][1][1]啊,我也没有标签代表来编辑标签描述,我只能创建标签。听起来合乎逻辑。操作系统应该释放所有资源。谢谢Corendo这个答案仍然适用于1.x版和更高版本?@dave yes。uv_loop_delete现在调用uv_loop_close,在1.x版中,它是关闭所有内容的主要入口点。