网页编程对我来说特别亲切,因为我就是从html、ASP、PHP一步步接触编程的。自己的编程爱好也是从那里一点一点被满足。不过离开大学之后很久没有碰过WEB了,最近看到嵌入式中的涉及到的web服务器,了解到了CGI编程,就想赶紧试一试。对于cgi,不算接触,但是还是听说过之前,对于纯粹写普通网站的人来说CGI却是很古老的东西了,之前在大学的时候学校的ftp搜索引擎,是一位特别牛b的学长写的,用的就是C实现CGI。后来我也想做一个,但是由于水平有限,后来也就不了了之。前几天在南图想找本关于CGI方面的书竟然都下架了,在网上搜索关于这方面的文章页很少,且很多是针对perl语言的,所以这里针对C语言的CGI写点东西。

嵌入式中的WEB服务器,由于嵌入式中主要是用C语言来实现,所以这里只谈C语言的CGI,而在嵌入式中的WEB服务器,大家一般选用BOA等,这里为什么选用IIS,主要是因为我们大部分人都是在windows下开发,所以在iis下调试自然是更方便一些。在网上看到很多人在问iis下配置关于C语言的CGI的方法,而网上的全部都是关于Perl的。我经过了两天的时间在网上一遍一遍的百度和摸索,终于试出来基于windows xp的IIS5.1和windows 7的IIS6.1上的CGI配置方法。

综述: 关于脚本和可执行程序

在iis中对于动态语言会设计到脚本和可执行程序。对于脚本是需要另外的程序对其进行解释的,例如perl脚本编写的CGI就是脚本,需要安装专门的程序区解释;而对于可执行程序,例如C语言编写的.cgi(是c语言编译出来的.exe程序,将扩展名exe改成cgi),其本身就是可执行程序,不需要另外的程序去解释,所以网上关于使用TC还是VC的编译器cl.exe作为可执行程序去配置c语言编写出来的cgi的说法都是错误的。其实CGI的实现就是将本身脚本或者可执行程序的标准输出,不再是通过屏幕打印,而是经过浏览器输出给客户端显示,所以你用一个vc或者tc的编译器去执行一个.exe的可执行文件是得不到想要的输出的。正确的作法是不需要和perl语言一样配置解释程序,而是配置为让文件执行。

具体操作:

由于网上针对IIS 和C语言的CGI的内容较少,所以下面的内容一步步用图片说明。方便向我一样的初次使用者。

1.编写CGI程序。

使用任何一种C语言开发工具,TC,VC,C-free均可,C/C++均可。内容我们还是使用经典的hello world。

  1. /****************************  hello.cpp
  1. 使用C++实现的CGI输出hello world!
  1. by kikilizhm
  2. *****************************/
  3. #include <iostream.h>
  4. void main()
  5. {
  6. cout<<"Content-type:text/html\n\n"<<endl;  /* 注意这里一定要按照这种格式,表示http头以供浏览器识别,后面的\n\n是http中要求的头和后面的内容必须空一格,                                                  而且必须使用反斜杠,不能使用" /n/n " ,这样会报错的,无法识别。 */
  7. cout<<"Hello World!"<<endl;
  8. }
  1. /********************************hello.c***************
  2. 使用C语言实现的CGI输出加粗的hello world!
  3. by kikilizhm
  4. ******************************************************/
  5. #include <stdio.h>
  6. int main()
  7. {
  8. printf("Content-type:text/html");
  9. printf("\n\n");
  10. printf("<b>Hello World!</b>");
  11. }

上面分别是使用C++和C语言编写的hello world 例程,根据个人习惯,然后编译生成 hello.exe 可执行文件,将扩展名exe改为cgi,变为hello.cgi。

现在我们的cgi程序就写好了,下面我们开始配置iis,看看效果。

2.针对windows xp  的IIS5.1的配置。其实配置很简单,只要大家看明白其中的根本。

说明:这里默认IIS已经安装好可用(具体安装IIS的方法可以百度一下,这里不细说),针对iis5.1我们需要的只是配置一下脚本和可执行文件的执行权限即可。

按照上面说的,exe文件不需要解释程序,直接执行即可。假设我们网站根目录是www,下www\cgi目录为脚本存放目录,我们把hello.cgi文件放到cgi目录下,这里为演示方便,正常情况下考虑安全等因素,常将存放脚本的目录使用虚拟目录挂接,不直接放在网站根目录下。

然后我们在IIS中右击cgi目录,选择属性,打开cgi属性对话框,在目录选项卡设置读取、写入、目录访问前的勾去掉。其中读取是防止在访问cgi程序时,浏览器将cgi文件作为下载文件弹出下载对话框,而不是实际执行显示在浏览器上。写入和目录访问时安全需要。这里特别注意去掉读取权限。

然后将下方的 ”执行权限“更改为 ”脚本和可执行文件“ ,这里也是重要的一步,不可以用纯脚本,一定要有可执行文件权限。点击确认再确认,重启IIS即可。

走到这里我们打开浏览器,输入 http://localhost/cgi/hello.cgi ,即可看到hello world的画面,如果还看不到或者出现其他提示错误,一般为网站的访问权限认证设置有问题,可以尝试修改文件夹访问权限。

**************************** ==针对win 7 的IIS6.1的配置== *****************************

3.win7中的IIS界面和windows xp 中的IIS5.1界面发生了很大的变化,IIS 6.1中已经内置有CGI处理模块,这里我们直接使用即可。

同样这里我们假设我们IIS6.1已经安装好,而且可以使用,新建网站名称:cgi-test,根目录为www,下面有子目录cgi用于存放cgi脚本文件。

在左侧的cgi-test网站中,我们单击cgi-test网站的cgi目录,右侧会显示cgi主页,我们在右侧 IIS 部分双击模块,进入模块功能,可以看到CgiModule模块,我们接下来就是要使用的这个模块来实现我们的cgi功能。

                 

看到这里,我们返回cgi目录的主页,双击CGI主页中的”处理程序映射“来配置 cgi文件的映射,在处理程序映射界面,每一条配置的路径相当于配置的文件扩展名,

状态为已启用或者禁用,处理程序即相应的模块或者脚本解释程序。 在最右侧的操作界面,我们可以看到我们可以选择的操作,其中包括 添加托管处理程序、添加脚本映射、添加通配符脚本映射,添加模块映射,和下面的编辑功能权限等。这里我们使用的是添加模块映射和编辑功能权限。

单击添加模块映射,在出现的编译模块映射对话框中,按照如图所示配置,请求路径输入 *.cgi ,表示cgi格式文件,模块选择CgiModule,可执行文件为空,名称可以随便写,这里为cgi-exe。确定后,增加了cgi-exe配置,然后右击这条配置选择编译功能权限,确保有执行权限,然后重启iis服务。在浏览器中输入地址,即可查看到hello world的打印。

看看我们的成果吧,这里只是打印了最简单的字符,服务器已经配置好了,大家可以发挥自己的聪明才智,实现自己的功能吧~

总结:

经过大概两天的时间,终于摸索出了在iis上配置C语言编写的CGI的方法,其实真正配置下来,花的时间并不多也不复杂,但是由于网上很少人使用iis做C的cgi的服务器,而且网上关于这类问题的回答都是答非所问,甚至是错误的说法,所以摸索起来很困难,但是这两天的时间里,在经历了从最初的没有头绪,到最后的思考网上很多人在说的perl语言的cgi和c语言的cgi的区别,去甄别那些错误的信息,并且从那些错误的信息里找出来对我又帮助的地方,比如刚开始的时候使用vc的编译器cl.exe去执行,并没有得到想要的结果,于是去尝试vc的bin目录下的其他程序,在有的程序返回了一部分字符的时候,在浏览器的错误信息里显示了错误的http头,比之前的空的头还是有点帮助,毕竟有了显示,虽然是个错误信息。然后尝试着用cmd.exe去执行,最后的最后确信不适用程序去执行,后面会出现访问cgi的时候出现下载的问题,用文本方式打开下载的文件,虽然也是和服务器端一样的名称,但是下载的文件内容已经是个文本,里面就是执行打印出来的信息,只是它被下载下来了,而不是在浏览器中显示,后来在网上看到了一个朋友发的msdn社区上的说明,需要去掉读取权限,这才恍然大悟。然后就看到了亲切的打印信息了。

即使一个一开始不明白或者没有涉及到的问题,不断的去想解决它,即使没有进展,但是对于你对问题的理解还是有很大帮助的,我想这和那种做梦发现苯环之类的是一样的道理。同时也是一种学习的方式,对于一种技术一下子接受不了的时候,可以先看一部分,了解一下,或者强迫自己先学,然后放置一段时间,再回头在学,就会发现很轻松了。

该睡觉了,希望这里能对大家起到帮助作用,另外,在使用的过程中,推荐大家使用合适的环境,比如在apache中配置cgi更加的简单和安全。针对IIS上的C语言的CGI主要是针对大家在调试过程中使用。

出处:http://blog.csdn.net/kikilizhm/article/details/7840719

最新文章

  1. 非关系型数据库来了,CRL快速开发框架升级到版本4
  2. IE8 ajax缓存问题
  3. python 学习笔记十七 django深入学习二 form,models
  4. ASP.NET中的Session怎么正确使用
  5. java线程中断和终止线程运行
  6. linux 运维知识体系
  7. android对大图片的缓存处理
  8. 5.6.3.8 fromCharCode()方法
  9. iOS开发 点击跳转到App Store 或者 点击按钮去评价
  10. oslo_config中的DuplicateOptError坑
  11. 跑马灯、短信与反射EditText
  12. 06jQuery-02-层级选择器
  13. WPF 10天修炼 第三天- Application全局应用程序类
  14. mysql学习--1.事务
  15. TFS: 解决The build agent error - the session for this agent already exists
  16. Linux排序不准确的问题,用以下两行代码解决
  17. WOE和IV
  18. ioncube
  19. linux常用命令:which 命令
  20. ABAP-SMARTFORMS

热门文章

  1. axios构建请求池处理全局loading状态&amp;&amp;axios避免重复请求
  2. 37mysql 表操作
  3. centos 7安装vmtools时提示The path &quot;&quot; is not a valid path to the xxx kernel headers.
  4. Ubuntu解压缩zip,tar,tar.gz,tar.bz2文件命令
  5. Intel DAAL AI加速——支持从数据预处理到模型预测,数据源必须使用DAAL的底层封装库
  6. MVC,重写AuthorizeAttribute实现自己的权限验证(一)
  7. bzoj1599
  8. npm install mysql --save-dev
  9. 参数 out
  10. 内核事件KEVENT(同步)