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.

  • 相关阅读:
    Cocos2d-JS V3.10 一个小bug提示
    HTML5骨骼动画Demo | 使用min2d、createjs、pixi播放spine动画
    喜大普奔!Fanvas正式对外开源了,一键把Flash转为Canvas动画!移动终端动画开发不再困难。
    #回馈老读者,晒书拿学习卡#
    【关于新版Cocos2dx/Cocos2d-JS】安装包和使用方式的变化
    好消息!Html5游戏和动画的福音
    nodejs搭配phantomjs highcharts后台生成图表
    【H5动画】谈谈canvas动画的闪烁问题
    【HTTP劫持和DNS劫持】实际JS对抗
    嵌入式开发之网络通信---分布式自组网mesh。OLSR,batman,babel,aodv
  • 原文地址:https://www.cnblogs.com/LiuYanYGZ/p/14201394.html
Copyright © 2011-2022 走看看