- 论坛徽章:
- 0
|
提供跨平台的C语言库,适合开发TCP/IP通讯程序,已支持AIX、HP-UX、Solaris、FreeBSD、Linux和Windows操作系统
本人辛苦了四年,颠覆多次,终成这个发布版,现在作为unix-center的开源项目,任何非册用户进入此链接都可以下载
http://unix-center.org/projects/enigma1983 厚道点的朋友,下完了别忘了过来支持一下本贴啊!
对通讯类程序感兴趣的建议下载使用,高手、初学者都可以找到有用的东西
本项目的QQ群,群号:21555812,群名:UNIX
本库的功能介绍:
1。配制文件:
不管什么程序总要读取配制文件吧?
我的配制文件特别之处在于:支持继承、别名、覆盖、include、行内注释
2。日志:
程序总要记点运行日志吧?
我的日志接口既支持记到本地的文件中,也可以通过socket发送远程的日志服务器,由日志服务器进行落地
看日志有时也很麻烦,得telnet,切换到哪个目录下,再来个vi,再来查找
我提供了一个logview的程序,通过一个命令即可查看远程机器上日志,并可进行相关搜索定位过滤
如果日志有好几百兆,vi是打不开的,查找也很慢,这时候logview优点就体现出来了
如果你想监控某个日志,logview -m name即可得到这个日志后续记录的内容了,没必要telnet,再用tail -f查看
3。命令行参数、环境变量、配制文件三合一:
程序需要的参数,光从配制文件里获取不够的,
从这三个地方获取,又使用了不同的接口,也不便于编程
接口简单,又不能批量读取配制,在配制参数较多时,也会有不便之处。
我的库中既提供了单个单个的获取参数的接口,也提供了很方便的批量读取参数的接口
4。字符编码转换:
8583类协议,有很多十六进制码转二进制码,BCD码。。。,本库的提供的一系列函数,让你做这些事得心应手,8583协议解析这次没有开放,以后整理一下再给大家
5。通讯语言:
写通讯类程序总要用到语言吧(也可称为协议)
如果用XML语言来定义协议,解析效率会很差,协议定义复杂了,别人也很难解析
8583类协议吧,又不支持字段乱序存放,1、2、3、4等位元必须依次存放,而且做字段嵌套也麻烦
本人定义的GL语言,简单到极致,就是域号、域长度、域内容,很好解析,也很好嵌套,也可以乱序存放,增加字段,删除字段都很容易
6。TCP库封装:
connect,listen,accept,send,recv,close,select特别是前三个,总要做个封装吧,总不能把sockaddr这种东西留给用户层做吧
7。通讯框架:
仅仅封装几个系统函数对开发复杂的通讯程序还远远不够吧?
本框架提供了单进程处理多个socket连接的框架,你只把建好的连接注册进来,再注册一个数据处理函数来处理接收到数据,发送数据时,尽管往缓冲区里发就是了,至于数据怎么缓冲的,各个socket怎么管理的,都不用关心了
8。定时器框架:
光处理网络数据还不够,有些事是要定时触发的(如心跳等),提供一个好用定时器框架,做起来就很方便了
只需要注册一些定时器到框架中即可,定时器要包含多长时间触一次及到了时间调用什么函数进行处理
9。DBF文件存取接口:
DBF文件虽然是老东西了,但还是有很多系统在用,即使没用了,用来存存简单数据还是不错的
DBF文件格式也不是很复杂,看懂了还是比较好解析的,但是要写出好用的接口来就是那么容易了
本人接用SQLAPI的接口形式,非常容易使用
本项目内的配制文件接口支持以下规则(think_cfg.h/c):
配制文件规则:
1:后者覆盖前者(后面的配制覆盖前面的配制,类似SHELL,后面定义的值会覆盖前面定义的值)
2:别名(值以$符号开头的,将取$后面的配制值,相当于变量,如果觉得名字起得不好,可以再起一个别名)
3:继承(带域的配制将继承全局配制,不带域或域为空即为全局配制,域即用[]括起来的部分,域可以同名,像C++的public成员一样,多写几段public也一样)
4:嵌套(类似C语言的include,无限嵌套)
5:实时赋值(类似shell,后面的配制将根据前面的配制,立即赋值)
6:就近取值(带域的别名取值时,先在域内查找名字,找不到时再找全局的配制,其实和继承一个意思)
7:搜索路径(在指定的一些路径下查找配制文件,类似C语言的头文件查找路径)
8:注释(#后的字符为注释,#在行首且后跟include的除外)
9:宽松格式(行首,行尾,域名前后(不包括中间),#号前后,$号前后,=号前后,配制名前后,配制值前后,这些地方的空白符(空格、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=enigma1983
email=enigma1983@163.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
此文件已加至项目中,可以从文件中的版本号确认你的版本是不是最新的,欢迎常来逛逛!
[ 本帖最后由 enigma1983 于 2009-7-4 18:24 编辑 ] |
评分
-
查看全部评分
|