以前在sourceforge上发布的C语言跨平台开发库,现在转到这里,支持Linux、AIX、HP-UX、Solaris、FreeBSD、MacOSX、Windows等种操作系统,涵盖dbf数据库操作、参数配制(跟boost一样集成了ini文件、命令行选项、环境变量三种来源)操作、进程通讯(共享内存、信号量、锁、共享内存队列等)、网络通讯异步框架(集成了select、poll、epoll、kevent四种技术)及基于think库开发的一些工具(netpeek、udprecv、udpsend、glpeek)与服务(logserver、logsend、logview)。
think_cfg.c - cfg配制文件操作接口
think_utility.c - env、命令行参数等操作接口
think_conf.c - 某分割符分割的简单数据操作接口
think_thread.c - 线程操作接口封装
think_shm.c - 共享内存接口封装
think_sem.c - 信号量接口封装
think_threadmutex - 线程级锁封装
think_mutex.c - 进程级锁封装
think_net.c - socket通讯基础接口封装
think_netcenter.c - 网络IO事件异步调度框架
think_timecenter.c - 时间事件异步调度框架
think_gl.c - BML语言C接口
think_db.c - 类似DBF的文件数据库
think_log.c - 日志接口(支持本地及网络两种存储方式,存储文件均为think_db文件数据库)
think_shmq.c - 共享内存队列接口
Makefile - linux下的make文件,下同
win32 - Windows下的工程文件(含nmake脚本),下同
udpsend、udprecv工具用法:https://zhuanlan.zhihu.com/p/358596742
netpeek工具用法:https://mp.weixin.qq.com/s?__biz=Mzk0ODI0NDE2Ng==&mid=2247484304&idx=1&sn=6a33754bb39df91f3fa6f67717d27d27&chksm=c36bd839f41c512f46b298a00ff431ef5e9b8cf0e381d0d3a6470319aa2935f20a43243b958c&token=749880663&lang=zh_CN#rd
- 后者覆盖前者(后面的配制覆盖前面的配制,类似SHELL,后面定义的值会覆盖前面定义的值)
- 别名(值以$符号开头的,将取$后面的配制值,相当于变量,如果觉得名字起得不好,可以再起一个别名)
- 继承(带域的配制将继承全局配制,不带域或域为空即为全局配制,域即用[]括起来的部分,域可以同名,像C++的public成员一样,多写几段public也一样)
- 嵌套(类似C语言的include,无限嵌套)
- 实时赋值(类似shell,后面的配制将根据前面的配制,立即赋值)
- 就近取值(带域的别名取值时,先在域内查找名字,找不到时再找全局的配制,其实和继承一个意思)
- 搜索路径(在指定的一些路径下查找配制文件,类似C语言的头文件查找路径)
- 注释(#后的字符为注释,#在行首且后跟include的除外)
- 宽松格式(行首,行尾,域名前后(不包括中间),#号前后,$号前后,=号前后,配制名前后,配制值前后,这些地方的空白符(空格、TAB符)都将被忽略)
例:
配制文件1:global.cfg:
lsnip=127.0.0.1 #此配制不属于任何域,因此为全局配制,类似全局变量,带域的变量称为局部变量,局部变量将覆盖全局变量
logaddr=tcp://127.0.0.1:10000
logflag=debug,print # debug,normal,info,key,warn,error,fatal
# trunc,excl,print,quiet
[specialcfg] # 这里开始为局部变量
name=krenx
email=krenx@qq.com
配制文件2:logserver.cfg:
#include <global.cfg> #引入另一个配制文件global.cfg
[logserver]
logname=logserver
logaddr= # logaddr将为空,而不是tcp://127.0.0.1:10000
#logflag= # [logserver].logflag将为debug,print
ip=$lsnip # ip将取值为127.0.0.1
port=10000
port=10008 #port将取值10008
logpath=../log