linux实验报告 联系客服

发布时间 : 星期五 文章linux实验报告更新完毕开始阅读49185a84336c1eb91b375d34

do_exec( arg, fd ); else do_cat( arg, fd ); } 服务器为每个请求创建一个新的进程来处理。子进程将请求分割成命令和参数。如果命令不是GET,服务器应答HTTP返回码表示未实现的命令。如果命令是GET,服务器将期望得到一个目录名,一个以 .cgi 结尾的可执行程序或文件名。如果没有该目录或指定的文件名,服务器报错。 如果存在目录或文件,服务器决定所要使用的操作:ls、exec或cat。 (2)目录列表函数

函数do_ls处理列出目录信息的请求: do_ls(char *dir, int fd) { FILE *fp ; fp = fdopen(fd,\ header(fp, \ fprintf(fp,\ fflush(fp); dup2(fd,1); dup2(fd,2); close(fd); execlp(\ perror(dir); exit(1); } 这里没有使用popen,而是通过调用ls命令,避免用户向shell popen传递任意字符串来运行的问题。 Webserv的源程序

main(int ac, char *av[]) { int sock, fd; FILE *fpin; char request[BUFSIZ]; if ( ac == 1 ){ fprintf(stderr,\ exit(1); } sock = make_server_socket( atoi(av[1]) ); if ( sock == -1 ) exit(2);

37

/* main loop here */ while(1){ /* take a call and buffer it */ fd = accept( sock, NULL, NULL ); fpin = fdopen(fd, \ /* read request */ fgets(request,BUFSIZ,fpin); printf(\ read_til_crnl(fpin); /* do what client asks */ process_rq(request, fd); fclose(fpin); } }

运行Web服务器:

编译程序,并在某个端口(建议用80)运行它: $cc webserv.c socklib.c –o webserv $./webserv 80

现在可以访问Web服务器,网址为http://yourhostname/。将html文件放到该目录中并用http://yourhostname/filename.html来打开它。创建下面的shell脚本: #!/bin/sh

printf ―Content-type: text/plain\\n\\nhello\\n‖;

将它命名为hello.cgi,用chmod改变权限为755,然后用浏览器调用该程序:http://yourhostname/hello.cgi。

评价表格 考核标准 (1)正确理解和掌握实验所涉及的概念和原理(20%); (2)按实验要求合理设计数据结构和程序结构(20%); (3)能设计测试用例,运行结果正确(20%); (4)认真记录实验数据,原理及实验结果分析准确(20%); 得分 (5)实验过程中,具有严谨的学习态度和认真、踏实、一丝不苟的科学作风(5%); (6)所做实验具有一定的创新性(5%); (7)实验报告规范(10%)。 38

39