用 C/C++ 写 CGI 程序
小传(zhcharles)
其实用 C/C++ 写 CGI 程序非常简单,主要是要清楚什么是 CGI。
CGI全称 Common Gateway Interface (共同编程接口),是一种编程接口,不论什么语言,只要按照该接口的标准编写出来的程序,即可叫做 CGI 程序。CGI 程序的输入/输出是使用编程语言的标准输入/标准输出,所以用 C/C++ 来写 CGI 程序就好象写普通程序一样,不过还有几样东西要注意的。
1、CGI 程序的通信方式
当有数据从浏览器传到 Web 服务器后,该服务器会根据传送的类型(基本有二类:GET/POST),将这些接收到的数据传入 QUERY_STRING 或 变量中,CGI 程序可以通过标准输入,在程序中接收这些数据。当要向浏览器发送信息时,只要向 Web 服务器发送特定的文件头信息,即可通过标准输出将信息发往 Web 服务器,Web 服务器处理完这些由 CGI 程序发来的信息后就会将这些信息发送给浏览器。这样就是 CGI 程序的通信方式了。
2、接收数据
用 GET 方式接收到的数据保存在 Web 服务器的 QUERY_STRING 变量里,而通过 POST 方式接收到的数据是保存在 这个 Web 服务器变量里。它们的唯一区别就是:以 GET 方式接收的数据是有长度限制,而用 POST 方式接收的数据是没有长度限制的。并且,以 GET 方式发送数据,可以通过 URL 的形式来发送,但 POST方式发送的数据必须要通过 Form 才到发送。
好,现在让我们用 C 语言写一个神圣的 CGI 程序 -- Hello,World!
vi hello.c # 编辑源文件
// Begin
#include <stdio.h>
main() {
printf("Content-type:text/html\n\n");
printf("Hello,World!");
}
// End
gcc -o hello hello.c # 编译
将该程序放在 Web 服务器的 cgi-bin 目录下,然后通过以下方式访问:
http://www.server.com/cgi-bin/examples/c/hello
这将在浏览器里打印出 Hello,World!
这就算得上是一个 CGI 程序了,是不是很简单?^_^ 第一句 printf() 是打印头信息,让 Web 浏览器知道以下打印的数据是什么类型的数据,本例子中指定了 text/html 类型,即 html 文档,所以下面的那句 printf() 打印的内容就会像我们写网页内容一样在浏览器上显示出来。
用 C/C++ 写 CGI 的最难之处应算从浏览器接收数据!不过,借助现成的源程序,从浏览器接收数据也只不过是小菜一碟而已。
我说的这个现成的源程序是用 FireBird 的 bbs2www 程序包里提取出来的。在这里下载:cgi.c - cgi.h
经本人提取出来的源程序只有两个文件 cgi.c 和 cgi.h。当要用它们来写 CGI 程序时,只需在程序中加入 #include "cgi.c" 即可,现以例子说明一下使用方法。假设要通过 GET 方式从浏览器接收用户的名字和 E-Mail 地址,源程序如下:
vi test.c # 编辑源文件
// Begin
#include <stdio.h>
#include "cgi.c"
main() {
char *name,*email;
cgi_init();
cgi_html_head();
name = cgi_get("name");
email = cgi_get("email");
printf("name = %s",name);
printf("<br>");
printf("email = %s",email);
cgi_quit();
}
// End
首先定义两个指针,然后调用 cgi_init() 来初始化 CGI 环境, cgi_html_head() 打印 HTML 文件类型信息,和 printf("Content-type:text/html\n\n"); 基本一样,不过用 cgi_html_head() 打印的头信息会指定文件的字符编码为 gb2312 即中文字符。调用 cgi_get() 方法取得指定关键字( name 和 email )的值。当完成 CGI 部分的代码后,要通用调用 cgi_quit() 和释放 CGI 所点的系统资源。最后就像以住一样去编译程序,gcc -O6 -o test test.c 然后将该程序放到 cgi-bin 目录,接着通过以下方式调用该程序。
http://www.server.com/cgi-bin/examples/c/test?name=charles&email=charles@netease.com
好了,一切就是这样简单!要开发更好的 CGI 程序就要靠您的 C/C++ 的功力了。欢迎指教!
分享到:
相关推荐
综上所述,"window可用cgi程序(c/c++)"涉及的知识点包括CGI原理、C/C++编程、Nginx服务器配置、spawn-fcgi的使用以及性能和安全考量。在实际操作中,需要结合提供的源码和使用说明来实现CGI程序在Windows环境下的...
C/C++实现CGI程序, 包含基本框架, 参数标准URI编解码, 数据解析, 回传数据等, 供学习之用
### 学习用C、C++编写CGI程序 #### 一、CGI简介与原理 **Common Gateway Interface (CGI)**,即通用网关接口,是一种标准接口,用于定义客户端(如Web浏览器)与服务器端(如Web服务器)之间进行交互的方式。它...
标题和描述中提到的"C/C++源代码网站"是指一系列在线平台,这些平台提供C和C++编程语言的源代码示例、库、组件和项目,对于学习和开发C/C++程序的人来说是非常宝贵的资源。以下是对这些网站及其提供的内容的详细说明...
在C/C++中,我们主要使用`socket()`, `bind()`, `listen()`, `accept()`, `send()`, `recv()`等函数来创建、连接、监听和通信。 2. HTTP协议:超文本传输协议(HTTP)是用于从万维网服务器传输超文本到本地浏览器的...
`c++_cgi.c`可能是一个使用C++语言编写的CGI程序,它利用了C++的类和对象来组织代码,以实现更复杂的业务逻辑。 4. **CGI测试**:`cgi-test.c`可能是一个用于测试CGI功能的程序,它可以帮助开发者验证CGI程序是否...
总的来说,FastCGI通过优化CGI的运行机制,提高了Web服务的性能和可扩展性,尤其对于C/C++开发者,提供了编写高效Web应用程序的途径。尽管现代Web开发中还有其他如PHP-FPM、WSGI等接口,但FastCGI仍然在某些场景下...
在本例中,标题提到的是“一些自已写的CGI程序”,这意味着我们正在讨论用户自己编写的CGI应用,可能是用C或C++语言实现的。 CGI在Web开发中的作用是充当桥梁,它接收来自HTTP服务器的请求,并生成一个响应,这个...
用纯C++语言写的CGI 处理http协议文件上传,程序中可以设置缓存区,不是把文件一下子全部的写入硬盘,而是从stdin中读取流,然后放置到缓存区,再由缓存区写入文件中,经测试可以上传好几G大小的文件。适用在arm或者...
在这个“login-cgi-mysql.zip”压缩包中,我们关注的是一个使用C/C++编写的CGI程序,其主要功能是实现Web用户的登录验证,验证过程通过连接MySQL数据库来完成。以下将详细讨论这个知识点。 1. **CGI基础**: CGI是...
标题中的"C-C++常用网址.docx"文档是一个资源集合,为C/C++程序员提供了一系列优秀的网站,这些网站提供了丰富的C/C++源代码示例、项目、教程和工具。描述部分指出,这个清单并非详尽无遗,作者欢迎任何补充和建议以...
8. **C Programming(http://www.cprogramming.com/cgi-bin/source/source.cgi)**:这个网站专门针对C/C++,提供了丰富的源代码和编程指导,适合所有水平的开发者。 9. **CodeCogs(http://www.codecogs.com/)**...
这有助于开发者在本地环境中测试CGI程序。 "www.pudn.com.txt"可能是关于这个压缩包来源的信息,或者是从某个网站下载资源的记录。 "CGIC.HTM"可能是库的文档或介绍,它可能包含关于如何使用Cgic库的详细信息,...
在Linux环境中,CGI脚本通常用Perl、C或C++编写。在这个压缩包中,可能包含的是用C语言编写的CGI源程序,用于处理来自Web端的请求,比如获取摄像头数据、控制LED状态或者修改开发板时间。 **Web端功能实现:** 1. ...
8. **C and C++ Programming Resource (http://www.cprogramming.com/cgi-bin/source/source.cgi)**:提供了一系列C和C++编程资源,包括代码示例、教程和论坛,是学习C/C++编程的全面指南。 9. **CodeCogs ...
8. **Cprogramming.com (http://www.cprogramming.com/cgi-bin/source/source.cgi)**:专注于C/C++的社区,提供源代码和编程技巧,是提高编程水平的有效途径。 9. **CodeCogs (http://www.codecogs.com/)**:提供...
由于资源限制,嵌入式系统通常需要轻量级的解决方案,因此选择C++这样的低级别语言编写CGI程序可以优化性能。 总的来说,这个资源包提供了一个可移植的C++ CGI用户登录验证解决方案,适用于多种环境,特别是嵌入式...
当用户通过浏览器访问一个CGI程序时,Web服务器接收请求并将其转发给CGI程序。CGI程序执行后生成HTML响应,再由Web服务器将这些响应内容返回给用户。这个过程使得Web服务器可以从外部程序获取数据,丰富了网页的交互...
1. **ISAPI (Internet Server Application Programming Interface)**:专为Microsoft IIS设计的接口,允许开发人员使用C/C++等语言编写Web应用程序。ISAPI应用程序通常以DLL形式存在,直接嵌入IIS进程,从而提高了...