1、c 语言编写 CGI 程序指南一、CGI 概述CGI(Common Gateway Interface: 公用网关接口) 规定了 Web 服务器调用其他可执行程序(CGI 程序) 的接口协议标准。Web 服务器通过调用 CGI 程序实现和 Web 浏览器的交互,也就是 CGI 程序接受 Web 浏览器发送给 Web 服务器的信息,进行处理, 将响应结果再回送给 Web 服务器及 Web 浏览器。CGI 程序一般完成 Web 网页中表单(Form)数据的处理、数据库查询和实现与传统应用系统的集成等工作。CGI 程序可以用任何程序设计语言编写,如 Shell 脚本语言、Perl、Fortran、P
2、ascal、C 语言等。但是用 C 语言编写的CGI 程序具有执行速度快、安全性高 (因为 C 语言程序是编译执行且不可被修改) 等特点。CGI 接口标准包括标准输入、环境变量、标准输出三部分。1.标准输入CGI 程序像其他可执行程序一样 ,可通过标准输入(stdin) 从 Web 服务器得到输入信息,如 Form 中的数据,这就是所谓的向 CGI 程序传递数据的 POST 方法。这意味着在操作系统命令行状态可执行 CGI 程序,对 CGI 程序进行调试。POST 方法是常用的方法,本文将以此方法为例,分析 CGI 程序设计的方法、过程和技巧。2.环境变量操作系统提供了许多环境变量,它们定义了
3、程序的执行环境,应用程序可以存取它们。Web 服务器和 CGI 接口又另外设置了自己的一些环境变量,用来向 CGI 程序传递一些重要的参数。CGI 的 GET 方法还通过 环境变量 QUERY-STRING 向 CGI 程序传递 Form 中的数据。3.标准输出CGI 程序通过标准输出(stdout) 将输出信息传送给 Web 服务器。传送给 Web 服务器的信息可以用各种格式,通常是以纯文本或者 HTML 文本的形式,这样我们就可以在命令行状态调试 CGI 程序,并且得到它们的输出。下面是一个简单的 CGI 程序,它将 HTML 中 Form 的信息直接输出到 We b 浏览器。# incl
4、ude # include main()int i , n ;printf (Content type: text/plainnn);n=0;if(getenv( CONTENT-LENGTH)n=atoi(getenv(CONTENT-LENGTH);for (i=0;i#include #include int htoi(char *);main()int i,n;char c;printf (Contenttype: text/plainnn);n=0;if (getenv(CONTENT-LENGTH)n=atoi(getenv( CONTENT-LENGTH);for (i=0; i
5、#include main()printf( Contenttype:text/htmlnn);printf( n );printf( An HTML Page From a CGIn);printf( n);printf( This is an HTML page generated from with i n a CGI program. .n );printf( n);printf( Go back to out put.html page n );printf( n);printf( n);fflush(stdout);上面的 CGI 程序简单地用 printf()函数来产生 HTML 源代码。请注意在输出的字符串中如果有双引号,在其前面必须有一个后斜字符, 这是因为整个 HTML 代码串已经在双引号内,所以 HTML 代码串中的双引号符必须用一个后斜字符来转义。五、结束语本文详细分析了用 C 语言进行 CGI 程序设计的方法、过程和技巧。C 语言的 CGI 程序虽然执行速度快、可靠性高,但是相对于 Perl 语言来说,C 语言缺乏强有力的字符串处理能力,因此在实际应用中,应根据需 要和个人爱好来选择合适的 CGI 程序设计语言。