`
lzquan
  • 浏览: 197681 次
  • 性别: Icon_minigender_1
  • 来自: 东莞
社区版块
存档分类
最新评论

用 C/C++ 写 CGI 程序

    博客分类:
  • PHP
阅读更多

其实用 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++ 的功力了。欢迎指教!


  原文地址 http://www.moon-soft.com/program/bbs/readelite887957.htm

分享到:
评论
1 楼 micboy 2012-04-17  
可以发我一份你修改好的cgi.c和cgi.h吗?谢谢 450683341@qq.com

相关推荐

    c/c++实现CGI的样例

    C/C++实现CGI程序, 包含基本框架, 参数标准URI编解码, 数据解析, 回传数据等, 供学习之用

    学习用c、c++写cgi程序

    CGI全称Common Gateway Interface(共同编程接口),是一种编程接口,不论什么语言,只要按照该接口的标准...CGI 程序的输入/输出是使用编程语言的标准输入/标准输出,所以用C/C++来写 CGI 程序就好象写普通程序一样。

    Fastcgi学习总结(C/C++语言版)

    网络上实在是找不到用C/C++写fastcgi web应用的例子,我根据自己做过的一个项目做了些总结。里面有一个详细C语言写的的范例程序。C++的版本也是大同小异,大家注意留心fastcgi++包里面的C++示例源代码。 好像很少有...

    window可用cgi程序(c/c++)

    window下可用的cgi程序 在window下,配合nginx和spawn-fcgi使用,内附源码和使用方法。

    cgi_file_upload

    用纯C++语言写的CGI 处理http协议文件上传,程序中可以设置缓存区,不是把文件一下子全部的写入硬盘,而是从stdin中读取流,然后放置到缓存区,再由缓存区写入文件中,经测试可以上传好几G大小的文件。适用在arm或者...

    一些自已写的CGI程序

    cgi getway c/c++ source

    VC++实现的简单的CGI程序

    大部分服务端程序采用例如PHP这样的脚本语言与服务器交互,由于工作需要,要求使用C程序与Apache服务器交互并与客户端浏览器交换信息,所以研究了一下C语言的CGI编程,这只是个简单的小例子,采用VS2008环境编写的...

    基于C++开发的WEB服务器,支持C++、Python、Java等多语言混合开发WEB应用.rar

    cppweb易拓展,作者开发Java、Python等模块,用于支持Java、Python等语言开发cgi程序,开发者可以直接使用C/C++、Java、Python等语言进行混合开发。 cppweb追求小而巧,对于开源库是拿来即用,源码工程自带zlib、...

    cgi用户登录验证源码和例子

    cgi开发的用户登录验证界面,绝对可用,window和arm嵌入式linux的cgi程序均可用,会话超时重新登录,方便集成到自己的应用程序中

    CGI开发使用手册

    《CGI开发使用手册》可供CGI编程人员参考,也为Internet网友编写自己的CGI程序提供了难得的帮手。 《CGI开发使用手册》目录: 第一部分 CGI基础 第1章 CGI简介 第2章 选择CGI工具 第二部分 CGI应用程序开发 第3章 ...

    CGI 开发使用手册

    第24章 C和C++的技巧与技术 第25章 Java的技巧和技术 第26章 AppleScript的提示和技术 第27章 使用PHP/FI 第七部分 修饰CGI脚本 第28章 测试和调试CGI脚本 第29章 CGI中的错误处理 第30章 CGI安全问题 第八部分 ...

    Ch Professional 6.3.0.14141

    它支持ISO的C语言标准(C90/C99)和C++类库,附带了8000多个函数库并支持众多的工业标准,支持POSIX, socket/Winsock, X11/Motif, OpenGL, ODBC, C LAPACK, GTK+, Win32, XML, 和CGI等等。Ch具有MATLAB的高级数值计算...

    python交大讲义.doc

    1.1 Python基础 Python是用标准C语言写成的一种面向对象的脚本语言,语法相对简单,符合人的思 维习惯,通过集成环境或解释器直接执行源程序。它可以运行在windows、linux等操作 系统平台上,具有丰富的功能库以处理...

    ChIDE集成开发环境和Ch命令窗口使用入门

    我现在编写一些很小的C/C++的程序,就用ChIDE,支持断点、调试,并且语法高亮等等。 注意:此IDE要到官网下载(支持35语言,自带中文),并且不是每个版本都有IDE环境,有的版本只有命令行。我下的是学生板(它的...

    gsoap user guide

    SOAP编译工具提供了一个SOAP/XML 关于C/C++ 语言的实现,从而让C/C++语言开发web服务或客户端程序的工作变得轻松了很多。绝大多数的C++web服务工具包提供一组API函数类库来处理特定的SOAP数据结构,这样就使得用户...

    c#+毕业设计+源码-civetweb:嵌入式C/C++Web服务器

    该项目的使命是提供易于使用,功能强大的C(C / C ++)嵌入式Web服务器,并具有可选的CGI,SSL和Lua支持。 CivetWeb拥有MIT许可证,因此您可以不受限制地进行创新。 开发人员可以将CivetWeb用作库,以将Web服务器...

    cgic库用于编写cgi程序

    cgi的编写有各种官方库,有C语言版本的cgic库,c++版本的cgicc库等等。 我们使用cgic库去编写cgi程序,简单易用

    C++编写进程调度模拟程序.txt

    asp| C&VC&C++| cgi| delphi| JAVA| php| VB| vf| 编程工具| 编程资源| 编译环境| 补丁类| 单片机开发资料| 电子商务| 服务器相关| 汇编| 经营管理| 另类其它| 数据库类教程| 图片素材| 图像软件

    cgi课件及代码

    是应用程序和Web服务器之间的接口标准.CGI程序允许用户通过网页把数据输入数据库,也允许数据从数据库流向用户.CGI通常和HTML表单一起使用.CGI程序一般可以用C,C++,VB等语言来写.

    Web应用安全:web数据库访问技术.pptx

    这种接口多种多样,数据库系统对CGI程序提供了各种数据库接口如Perl、C/C++、VB等。为了使用各种数据库系统,CGI程序支持ODBC方式,通过ODBC接口访问数据库。 2.1、ODBC技术介绍 ODBC(Open Database Connectivity,...

Global site tag (gtag.js) - Google Analytics