zoukankan      html  css  js  c++  java
  • libubox

    libubox

    It's one of the core libraries used within openwrt because it's a set of utilities, mostly wrappers, that are present usually in programs and that have been coded in a flexible and reusable way to avoid wasting time.

    The library consists mostly on independent functionalities, ones higher level than others.

    Simple utility functions. Endian conversion, bitfield operations, compiler attribute wrapping, sequential memory allocation function (calloc_a), static array size macro, assertion/bug utility function, clock get time wrapper for apple compatibility, base64 encoding decoding.

    This is a really simple library encouraged to be a wrapper to avoid all those socket api library calls. You can create TCPUDP and UNIX sockets, clients and servers, ipv4/v6 and non/blocking.

    The idea is to call usock() and have your fd returned.

    The most used part. Uloop is a loop runner for i/o. Gets in charge of polling the different file descriptors you have added to it, gets in charge of running timers, and helps you manage child processes. Supports epoll and kqueue as event running backends.

    The fd management part is set up with the uloop_fd struct, just adding the fd and the callback function you want called when an event arises. The rest of the structure is for internal use.

    The timeout management part is mostly prepared to do simple things, if you have the idea of doing something comples, you might want to have a look on libubox/runqueue.h which implements interesting functionality on top of uloop.

    Timeout structure should be initialized with just the callback and pending=false (timeout={.cb=cb_func} does the work), and added to uloop using uloop_timeout_set(), do not use the other _add() function because then you will need to set up the time yourself calling time.h functions. _set() uses _add() internally.

    TBDN: Process management part

    This part is a helper to pass data in binary. There are several supported datatypes, and it creates blobs that could be sent over any socket, as endianess is taken care in the library itself.

    The method is to create a type-value chained data, supporting nested data. This part basically covers putting and getting datatypes. Further functionality is implemented in blobmsg.h

    Blobmsg sits on top of blob.h, providing tables and arrays, providing it's own but parallel datatypes.

    Utility to create lists. A way to create lists of structures just by adding struct list_head to your structures. It comes with a lot of iterator macros, with some of them allowing deletion on iteration (the ones ending in _safe). It also has some list operations like slicing, moving, and inserting in different points. It is a double linked list implementation (just in case). Uses the same API as the one present in the linux kernel.

    Uses list.h to provide protection against recursive iteration with deletes.

    Key value lists, allowing duplicate elements. Keys are meant to be strings, values can be any datatype, the user has to provide a data measuring function though. If you are using strings or blobs (from blob.h), there are two measuring functions already, kvlist_strlen and kvlist_blob_len respectively.

    kvlist.h implementation uses avl.h.

  • 相关阅读:
    使用cordova,监听安卓机物理返回按键,实现退出程序的功能
    使用cordova network-information 插件监听手机网络状态
    使用cordova,使html5也能像IOS,Android那样可以 调取手机的相机拍照功能
    使用canvas给图片添加水印, canvas转换base64,,canvas,图片,base64等转换成二进制文档流的方法,并将合成的图片上传到服务器,
    phpStudy的安装和配置
    小程序入坑(一)---如何引入iconfont 字体图标
    HTML5 原生API input file 来实现多图上传,并大图预览
    webpack引入全局jQuery
    前端滑动分页获取数据(jQuery)
    开源蚂蚁笔记自建服务器
  • 原文地址:https://www.cnblogs.com/LiuYanYGZ/p/14201394.html
Copyright © 2011-2022 走看看