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当做个科普了
- boa研究学习(1):最开始基本的一些linux编程
- Linux最基本的一些命令
- linux的一些最基本命令
- 学习研究的开始
- 开始学习Linux的一些建议
- 开始学习Linux的一些建议
- 开始学习Linux的一些建议
- 从最基本的开始
- linux 多线程编程的一些基本函数
- Linux一些最基本命令
- Linux一些最基本命令
- Quartz学习研究(一):一个最基本的Quartz项目(附项目源代码)
- Quartz学习研究(二):一个最基本的Quartz、Spring项目(附项目源代码)
- 开始学习LINUX编程
- 从今天开始,我也开始使用csdn发一些我学习和研究的东西。
- 开始学习linux下的C编程
- 最简单的一些linux命令的基本的实现
- 一些最基本的概念
- css中的选择器
- 重庆大学软件学院2013级操作系统实验四:虚拟内存
- 【每日一剂】---ADB
- WSASocket()与Socket()的区别
- Mac——如何输入⌘、⌥、⇧、⌃、⎋等特殊字符
- boa研究学习(1):最开始基本的一些linux编程
- Junit原理详解三
- 二叉树的顺序存储
- Spring注解@ResponseBody
- WebService入门HelloWS
- java,http请求
- SLF4J和Logback日志框架详解
- Junit原理详解四
- objective c下的对象模型