上一小节已经实现了浏览器发送请求,然后服务器给出应答信息,然后浏览器显示出服务器发送过来的网页。一切看起来都是那么的美好。这一小节就准备实现可以根据地址栏url的不同来返回指定的网页。目前还不考虑带参数的问题。
stat函数
#include <sys/stat.h>
int stat(const char *restrict pathname,struct stat * restrict buf);
int fstat(int filedes,struct stat * buf);
int lstat(const char *restrict pathname,struct stat * restrict buf);
给出pathname,stat函数就返回与此命名文件有关的信息结构。fstat函数获取已在描述符filedes上打开文件的有关信息。lstat函数类似与stat,但是命名的文件不是个符号链接。
实现指定url访问指定目录的web服务器
1 int WebServer::ServerRequest(int cli_fd) 2 { 3 char buf[1024]; 4 int size=1024; 5 int i,j; 6 char method[255];//用于保存请求方式 7 char url[512]; 8 char path[1024]; 9 struct stat st; 10 int cgi; 11 memset(buf,0,sizeof(buf)); 12 cgi=0; 13 //获取第一行请求信息 一般格式为: GET / HTTP/1.1 14 // POST / HTTP/1.1 15 size=get_line(cli_fd,buf,sizeof(buf)); 16 cout<<" "<<buf<<endl; 17 i=0,j=0; 18 //截取第一个单词 19 while(!isspace(buf[j]) && (i<sizeof(method)-1)) 20 { 21 method[i]=buf[j]; 22 i++;j++; 23 } 24 method[i]='