11 libubox
1 libubox
主要提供事件循环,二进制块格式处理、linux
链表实现和一些JSON
辅助
主要包含3个软件包:libubox
、jshn
、libblobmsg-json
1.1 libubox
1、提供多种基础通用功能接口。如:链表、平衡二叉树、二进制块处理、MD5
等
2、提供多种sock
接口封装
3、提供事件驱动机制及任务管理功能
utils.h
提供简单实用功能。如:字节序转换、位操作、编译器属性包装、连续的内存分配函数、静态数组大小的宏、base64
编码解码等blob.h
提供二进制数据处理功能。可以创建块数据在socket
上发送。整形数字会在libubox
库内转换为网络字节序进行处理。二进制的处理方法是创建一个TLV
(类型-长度-值)、usock.h
socket
对象封装。uloop.h
提供时间驱动机制接口。基于epoll
来实现的。
文件描述符fd
是由uloop_fd
结构来设置
超时管理由uloop_timeout
结构来管理
libubox
常用uloop
接口函数
uloop_fd_add : 将一个新文件描述符添加到事件处理循环中
uloop_fd_delete : 将一个文件描述符从事件循环中删除
uloop_init : 初始化uloop中epoll_create来创建epoll
uloop_run : 进入事件处理循环中
uloop_done : 释放uloop中的epoll
uloop_end : 设置uloop内部结束循环标志
uloop_time_set : 设置定时器超时时间,并添加到链表
1.2 jshn
jshn
封装JSON
对象的装换库,用于脚本语言生成JSON
对象和将JSON
对象数据取出来。
jshn
软件包包含两个文件jshn
和jshn.sh
jshn
读取JSON
格式的字符串,并组合为jshn_add_*
命令导出到标准输出stdout
中
将环境变量中的设置组合为JSON
字符串,并输出到标准输出中jshn.sh
利用jshn
工具对JSON
的操作进行更为方便的封装
将JSON
格式的字符串在环境变量中导入和导出
将配置内容设置到环境变量中
从环境变量中查询配置设置的值
jshn
定义的命令接口含义
json_init : 初始化JSON对象
json_add_string : 增加字符串数据类型,例 json_add_string name zhang
json_dump : 以JSON格式输出所有增加的JSON内容
json_add_init : 添加整形数据,例 json_add_init 36
json_add_boolean: 添加布尔类型
json_load : 将所有内容读入JSON对象中,并设置到环境变量中
json_get_var : 从环境变量中获取JSON对象的值 json_get_var ifdev device 获取device的值并赋值给ifdev变量
json_get_type : 从环境变量中获取JSON对象类型,例 json_get_var ifdev device
json_get_keys : 从环境变量中获取JSON对象的所有名称
json_get_values : 从环境变量中获取JSON对象的所有值
json_select : 选择JSON对象
json_add_object : 添加json对象
json_close_add : 完成对象添加
json_add_array : 增加顺序数组,例如json_add_array study,数组的内容后续通过json_add_string来增加
json_clean : 清除jshn所有设置的环境变量
json_close_array : 关闭顺序数组的增加
json_set_namespace : 定义命名空间。及定义设置变量的前缀,将变量区分开
JSON
格式
以左花括符开始,右花括符结束
名称后有冒号与值分隔,值与名称间使用逗号分隔
数组,向量,链表使用数组形式储存
{
"vlan": {
"type-list": [
"management"
],
"management-list": [
"cfg027ec2"
],
"management": {
"cfg027ec2": {
"enable": "0"
}
}
}
}