梦想是在汗水中渐渐绽放的小雏菊
它一定不会背叛曾经的各种苦逼
为什么不是0.1版呢?
因为0.1版在刚刚准备发布之前,加上了断点续传下载,所以就升级成0.2版了。
这本来是在上个星期学习网络编程的时候,从想试一下直接编程从一个web服务器的80端口能读到什么东西,到想试一下假装一个web服务器发送点报文什么的,到后来一点点的加上去,就变成了现在这样。。
这是一个mini的web服务器,运行在linux上,可以用C语言写动态页面,用在嵌入式系统上很好玩的,虽然很mini,但是该有的功能都有了.
它能加载静态网页,javascript脚本,dsl页面,并能够根据优先级查找默认页面。
支持get和post方法传递参数。
支持断点续传下载
支持配置成单线程或多线程模型
最主要的是,它很小.....
对了,那个dsl页面是什么?它是daisy servlet的缩写^_^,是模仿servlet的那种感觉,用C语言来写的动态页面,可能有点像CGI,但我没用过实际像不像也不知道...,我感觉形式上还是像servlet。
在压缩包中提供了两个sdl程序的示例,其中在frist文件夹下有这样一个程序
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include "daisy_dsl.h"
int main(int argc, char *argv[])
{
diter_t iter;
dsl_init(argc,argv); //初始化环境
dsl_iter_init(&iter);//得到一个迭代器,获取从get或者post方法传递过来的参数用
dsl_write("
daisy lib test!");
while(dsl_iter_hasnext(iter)) //如果有下一个参数。。。
{
dsl_write("
%s",dsl_iter_getnext(&iter,NULL,0));//打印出这个键值对
}
dsl_write("
get parameter: %s",dsl_getparamter("primula",NULL,0));//获取一个名叫“primula”的参数
dsl_write("
");
dsl_close();//关闭输出流
return 0;
}
上面就是一个简单的
编写一个dsl页面需要用到一个库,库的源代码在daisy_servlet目录下,但是目前比较简陋,也没有什么注释。。。
库的文件放在lib目录下,是一个静态库,库的头文件是include目录下的daisy_dsl.h,在提供的两个示例程序中,有makefile可以作为模版参考。
简要说下库中的几种方法,因为目前源文件中还没有什么注释,都是下课时间写的,匆忙,见谅。。。。
/*初始化环境,将main函数的参数直接传进来*/
int dsl_init(int argc, char *argv[]);
/*向流中写入数据,与printf用法类似,但要先用dsl_init初始化*/
dsl_write(fmt, args...) fprintf(dsl_stream, fmt, ## args) //;fflush(dsl_stream);
//int dsl_write(char *str);
/*关闭流,程序退出前记得关闭。。*/
int dsl_close();
/*获得访问页面使用的URL*/
char* dsl_get_url();
/*得到一个读取参数的迭代器传参时取地址*/
diter_t dsl_iter_init(diter_t *iter);
/*测试是否有下一个元素,参数为前面创建的迭代器*/
int dsl_iter_hasnext(diter_t iter);
/*得到下一个参数对,是一个字符串,参数一为一个迭代器的指针
参数二为装这个字符串的buffer,参数3是buffer长度,如不需要修改内容
buffer可以为NULL,长度为0,返回值为字符串首地址,但使用返回值不能
去修改参数内容
*/
char* dsl_iter_getnext(diter_t *iter, char *buff,char buffsize);
/*根据名字获取一个参数值,如不存在则为NULL,参数23同上。。*/
char* dsl_getparamter(char *name,char *buff,char buffsize);
在example目录下还有一个shutdown文件夹,它通过一个html页面提交一个表单到dsl页面中(dsl上面说过是C语言写的)如果密码正确可以关掉运行中服务器或者让服务器重启,只是为了演示这种网页对底层控制的方式,因为走mini的嵌入式路线嘛。。。。
然后再说说目录内容
bin中装的是编译出来的文件,一个是daisy_core,还有个是launcher,daisy_core是主程序,可以直接运行,但执行launcher可以把core送到后台守护进程去运行,不占终端嘛。。所以运行一般用launcher,测试的时候直接运行core。
core目录就是主要代码啦
core_launch就是launcher的代码了,运行launcher的时候,它会生成一个XXXXXXXXXXX的脚本,方便关掉变成守护进程的daisy核。daisy_servlet 就是dsl库的源文件,同样现在还很简陋。。。
errpage是存放错误页面的,现在只定义了404错误,和414URL太长的错误,post的数据长了暂时也算在414上。
example就是示例程序了,目前只有两个。
include是编写dsl需要的头文件。
lib是编写dsl需要的库文件,只有一个静态库,编译参考的makefile还是在example里。
webroot就是服务器的根目录啦。
然后就是三个脚本,分别是启动,停止,和调试启动,启动使用的是luncher,调试启动就直接加载的daisy core
关于服务器的参数配置,这个目前还比较尴尬,因为没有做配置脚本所以就只有在头文件中配置,配置的头文件是core/include/daisy_config.h,调试版本啊,线程配置,web根目录,默认错误页面啊什么的都在里面,那个KEEP_ALIVE不要打开,那个是关于http连接保持的,目前还没有实现。。。
如果要移植到arm上,那就把顶层makefile的CC改成arm-linux-gcc吧,源文件都不用改,但是注意那个库的生成命令也要把ar改成arm-linux-ar。。
以上就是daisy0.2版的简单介绍,提供源码,参考学习,时间不宽裕,所以很多地方没写注释,也不怎么规范,以后逐渐完善,如果哪位高手有高见的话,不要吝啬让我学习下呗~[s:227]各种设计结构编码内存效率算法问题上欢迎各种拍砖,有砖头垫脚才能站得更高\^_^/
E-mail:primula@XXXXXXXXXt
daisy_0.2.rar
74.48KB
RAR
47次下载
200字以内,仅用于支线交流,主线讨论请采用回复功能。