boa研究学习(1):最开始基本的一些linux编程

来源:互联网 发布:sqlserver 统计表空间 编辑:程序博客网 时间:2024/06/06 00:26

开始对嵌入式常用web server—-boa的学习。
分4步走吧
1 init部分,牵涉到一些基本linux环境下的编程,顺带复习巩固
2 事件驱动部分
3 一些结构性技巧
4 周边技术扩展

今天从第一部分开始把,按照文档格式,一步一步走
一、文件权限设置,umask,牵涉到了基本的linux编程,贴个链接
umask
主要是控制下进程产生文件的权限,没有什么大的值得注意的地方,或者说,本来嵌入式web server也是做兼容控制比较多,很少用来做网站,对于安全方面的要求就是少之又少了。

二、重定向标准输入输出,将本进程的标准输入和标准输出重定向到黑洞—/dev/null之中
当然牵涉到一些基本的文件操作编程了
open,dup2,STDIN_FILENO,STDOUT_FILENO,
同样贴个链接,给自己个回顾,也给将来的初学者一个方便
dup2
将输入输出流重定向到黑洞,就是让整个程序通过log来查看运行信息了。
顺便提一嘴,这其中牵涉到了linux的文件系统知识,进程创建时的一些细节知识,给自己留个提醒,以后有机会做进一步研究,前面虽然看过,但是都是走马观花。

三、记录当前时间,用了time函数,注释上说,市委了更新时间戳,log_error_time会用到。

四、从命令行获取配置参数,boa会从命令行和配置文件获取启动参数,编程的时候的基本技巧。
getopt

扩展开的只是就是进程创建的时候的参数传递过程,抽个空去研究下,也是略有了解,做个补完吧。

五、设置server root,根目录设置,fixup_server_root()
设置从命令行获取到的根目录,如果没有获取到,那就直接设置为默认目录。
其中有个蛮有意思的函数,normalize_path();将相对路径,转换为绝对路径。用了一些函数的组合获取到绝对路径,作为菜单,略微分析下。

首先直接判断路径名是否直接以”/”开头,如果以这个开头,且文件存在,判定是绝对路径直接返回了。

if(path[0]=='/') {    endpath = strdup(path);}

否则的话,就用getcwd获取当前目录,这其中使用了errno对错误返回类型的判断,考虑还是比较细致的,只是感觉他的编程风格不喜欢,还是喜欢在所有if后面跟上括号,防止更改时候出现if匹配上的错误。

else {    if(getcwd(dirbuf, DIRBUF_SIZE) == NULL) {        if(errno == EANGE)            perror(...);        else if (errno == EANGE)             perror(...);        else            perror(...);        exit(1);    }}

剩下的就是一些基本操作,待续。。。。
下一篇将会介绍一个重点了,关于实战编程很重要的读取配置文件机制了,采用的是flex和yacc,前段时间研究过,下篇blog当做个科普了

0 0
原创粉丝点击