11 libubox

摘要:
1libubox主要提供事件循环,二进制块格式处理、linux链表实现和一些JSON辅助主要包含3个软件包:libubox、jshn、libblobmsg-json1.1libubox1、提供多种基础通用功能接口。如:字节序转换、位操作、编译器属性包装、连续的内存分配函数、静态数组大小的宏、base64编码解码等blob.h提供二进制数据处理功能。整形数字会在libubox库内转换为网络字节序进行处理。二进制的处理方法是创建一个TLV、usock.hsocket对象封装。uloop.h提供时间驱动机制接口。

1 libubox

主要提供事件循环,二进制块格式处理、linux链表实现和一些JSON辅助
主要包含3个软件包:libuboxjshnlibblobmsg-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软件包包含两个文件jshnjshn.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"
                        }
                }
        }
}

免责声明:文章转载自《11 libubox》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇FDR & FWE【C#】Socket中的ssl通信下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Linux系统移植(1)

一、u-boot工程   1.BootLoader介绍     BootLoader是操作系统运行之前要执行的一段程序,它复制初始化硬件设备、建立内存空间映射,为操作系统的运行做好准备,是一个专门加载操作系统的程序。     对于嵌入式系统而言,没有通用的硬件平台,因此也没有通用的BootLoader,不同的平台、CPUyi架构都有不同的BootLoade...

tomcat环境变量的设置(不在系统中设置环境变量,可以直接运行)

背景:运维人员希望拿到tomcat压缩包后,解压后就能运行,不想操心JDK是否已经按照好了、环境变量是否设置了等烦心事。。。 设置步骤如下: 1. 准备一个压缩版的tomcat,楼主使用的是tomcat8,下载地址为:https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.50/bi...

jenkins的安装

一、安装git 1.安装依赖 yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker -y 2.下载安装包https://github.com/git/git/releases wget ht...

速看,APP测试之ADB最全指南!

大家好,我是coco小锦鲤我又来了 我又带着希望和爱来了 ​今天介绍ADB环境搭建及常用的ADB命令 ADB全称Android Debug Bridge, 是android sdk里的一个工具,目的是起到调试桥的作用,用这个工具可以直接操作管理android模拟器或者真实的andriod设备(手机),是客户端测试常用的辅助工具。 借助adb工具,我们可以管...

Android环境配置和移动自动化(Genymotion)相关配置

本机环境: Window10 其他材料准备: 安卓开发者网站(AndroidStudio下载-3.6.3) 安卓开发工具网站(SDKTools下载-android-sdk_r24.4.1-windows.zip) Genymotion模拟器下载(如果未安装VirtualBox 虚拟机, 选择with VirtualBox-genymotion-3.1.0...

Centos7安装Jdk8

1. 说明 以下全部操作均在root下执行 2. 下载jdk8 在JDK下载页面下载JDK,如下: 3. 解压jdk压缩包 tar -zxvf jdk-8u181-linux-x64.tar.gz #解压jdk压缩包 mv jdk1.8.0_181/ /usr/local/lib #将jdk压缩包放到 /usr/local/lib目录下 4. 生成软连接...