libubox中uloop库的使用
摘自:https://blog.csdn.net/liangdsing/article/details/53201410
uloop.c是libubox的一个小模块,简化了编程
1. socket 使用
#include "" struct uloop_fd ufd; //创建uloop_fd全局变量 static void fd_handler(struct uloop_fd *u, unsigned int ev) { if(recvfrom(u->fd, ...)) == -1) { } else { //do your work } } int main() { // int socket = socket(....); ufd.fd = socket; uloop_init(); //使用库初始化 ufd.cb = fd_handler; uloop_fd_add(&ufd, ULOOP_READ)); uloop_run(); }
2. 定时器使用
#include "" struct uloop_timeout timeout; //创建uloop_timeout全局变量 int frequency = 5; //每隔5秒超时一次 static void timeout_cb(struct uloop_timeout *t) { //do your work uloop_timeout_set(t, frequency * 1000);//设置下次的超时时间 } int main() { uloop_init(); //使用库初始化 timeout.cb = timeout_cb; uloop_timeout_set(t, frequency * 1000);//设置下次的超时时间 uloop_run(); }
3. 子进程的使用
其作用是在子进程中调用rsync命令进行文件同步,子进程退出后调用rsync_complete回调函数
#include "" static struct uloop_process rsync; //创建rsync全局变量 static void rsync_complete(struct uloop_process *proc, int ret) { //do something where child exit; printf("rsync work is complete\n"); } function fun() { char *argv[]={"rsync", "-az", "rsync://XYZ@192.168.26.99/www","/root/www/","--password-file=/root/rsync.secrets", NULL}; rsync.cb = rsync_complete; rsync.pid = fork(); if (!rsync.pid) { /* This is child process*/ execvp(argv[0], argv); fprintf(stderr, "fork failed\n"); exit(-1); } if (rsync.pid <=0) { fprintf(stderr, "fork failed2\n"); return -1; } uloop_process_add(&rsync); } int main() { ..... uloop_init(); //使用库前进行初始化 fun(); uloop_run(); }
以上是简单的伪代码演示。uloop只适合于单线程中的任务,多线程会有bug。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
2018-12-28 搭建自己的MQTT服务器
2018-12-28 Linux编程实现蜂鸣器演奏康定情歌
2018-12-28 linux c MQTT客户端实现
2016-12-28 最详细的Log4j使用教程