项目调试
$./xhttpd /home/itcase/dir
GET /hello.c http/1.1 回车两次
改配置文件
xhttpd -> xhttpd1 三个
出错(服务器程序7*24不当机)
通过send_err发送到页面
用define定义一个错误日志 do{}while(0)
缓冲区
行缓冲:
缓冲区的刷新,依赖换行标记。\n \r\n 标准输出缓冲区 借助fflus(stdout)刷新
全缓冲:
缓冲区的刷新,依赖于文件结束标记EOF。 用户缓冲区、内核默认文件读写缓冲区。
无缓冲:
只要缓冲区有内容,立即刷新到屏幕。 标准错误缓冲区。
目录的处理:
1.判断 argc != 2
2.chdir() 工作目录切换
3.fget读取http首行。 GET / http/1.1 GET /hello.c http/1.1
4.拆分sscanf("%[^ ]...", ) 单独判断 / ./ ../
解码操作 --- 实际在 资源目录中存储文件名
5.stat 判断是文件还是目录
6.分支语句
1)文件
根据文件后缀名,获取类型、fopen、写http header、写文件内容
2)目录 ----父级目录和子级目录之间,两次访问。从http请求出发,没有从属关系。
scandir(目录名,(传出)结构体指针数组的地址,过滤器(NULL), 排序方法);
遍历该目录下的所有目录项(子文件、目录内容),形成列表展示。arr[i]->d_name
写http header、html页面 -> 显示目录的列表项
注意 . 和 .. 操作
中文编码 主要是汉字和一些特殊符号
浏览器中选择utf-8
$ unicode 学 输出
$man ASCII
/*
这里的内容是处理%20之类的东西!是“解码”过程。
%20 URT编码中的‘ ’(space)
*/
static void strdecode(char *to, char *from)
{
for(; *from != '\0'; ++to, ++from)
{
//...
}
}
怎样看代码:
shift+k:进man配置
catgs:Linux操作系统默认一个代码查看工具
sudo apt-get install ctages
ctags --help
步骤:
1.建立源码之间的组织关系:
ctags ./*.c -R 生成tags文件。组织当前项目之间的模板调用关系。
在源码内部,使用Ctrl-p 直接在源码所在的目录位置生成 tags。
2.光标移到待查看的函数名上,使用Ctrl-]跳转到函数定义位置。
3.Ctrl-T 跳回到跳转起始位置。
4.Ctrl-o 查看当前项目 包含的模块列表。(多少个.c文件等等)
5.F4查看模块内的函数列表(模块有几个函数,函数的作用)
类 xinetd 服务器:
1.守护进程:fork()子进程 父exit(); 子setsid()创建会话。 关闭文件描述符。 修改文件权限。
2.main { while(1){...} }
3.socket(); bind、listen、setsockopt();端口复用。
端口的获取:1.对应的配置文件。其中存储port
2.写死。2222
3.参数传递:提示用户输入。命令号参数
4.epoll、select、poll监听客户端的连接。(高并发才添加)
5.cfd = accpet() 创建一个用于通信fd(套接字)
6.创建一个进程、线程(线程更好点,资源节省,linux下相差不大)。
pthread_create();分离态。detach(); 子线程 主控函数中 浏览器通信
7.处理浏览器请求。xttpd的功能。