您的位置:首页 > 理论基础 > 计算机网络

Tinyhttpd 源码中关于 color.cgi 脚本的理解

2017-03-01 11:39 471 查看
这几天看了一下Tinyhttpd源码,下面简单记录一下自己遇到的问及笔记吧!首先在我是在ubuntu16.04下进行的,从别人github上fork来的Tinyhttpd源码在此平台下不能直接使用,先说一下我fork的源码的问题:

1.    accept_request(void*arg), 作者可能想兼顾线程调用此函数时传递函数参数,可是在accept_request(…)中引用函数参数时有问题:

源码是直接这样用:int client = (intptr_t) arg; 然而我在ubuntu下查到intptr_t (/usr/include/stain.h) 定义为:
 


所以这里我改为  int client = *((int *)arg);

2.    还要修改htdocs/ 的color.cgi, check.cgi权限

sudo chmod 764 color.cgi check.cgi
3. 关于color.cgi 脚本, 第一句关于解释器选择, 使用which perl,可以找到perl所在位置,我的是在/usr/bin/perl,所以改为
#!/usr/local/bin/perl -Tw

    OK! 这样就可以正常运行了



正式说一下color.cgi脚本, 源码使用perl脚本写的,由于perl强大的字符串处理能力,所以程序写的非常简洁。

#!/usr/bin/perl -Tw

use strict;    #为了帮助我们寻找错误拼写造成的错误
use CGI;       #通过use关键字引入CGI模块

my($cgi) = new CGI;     #创建一个新的CGI对象

print $cgi->header;     #输出CGI的标准头部信息
my($color) = "blue";    #创建变量color并默认为blue
$color = $cgi->param('color') if defined $cgi->param('color');

print $cgi->start_html(-title => uc($color),
-BGCOLOR => $color);
print $cgi->h1("This is $color");
print $cgi->end_html;


这里
$color = $cgi->param('color') if defined $cgi->param('color');
按照C的写法应该这样写就好理解了
If( defined($cgi->param(‘color’) )
$color = $cgi->param(‘color’);

这里用的是perl的参数-值,通过param方法获取color参数的值,同理$cgi-param()  表示获取所有参数

print $cgi->start_html(-title => uc($color),
-BGCOLOR => $color);
print $cgi->h1("This is $color");
print $cgi->end_html;这几句是设置输出html格式的数据,其中title为color参数的值对应的大写字符串, BGCOLOR设置背景颜色为color的值
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Tinyhttpd 脚本