CGIC是C语言CGI库函数,用于编写CGI程序

CGIC 主要完成以下功能

* 对数据进行语法分析

* 接收以 GET 和 PSOT 两种方式发送的数据

* 把 FORM 中的不同域连接成连续的串

* 为检索 FORM 数据而提供字符串 , 整数 , 浮点以及单项和多项选择功能

* 为数字字段提供边界检测

* 把 CGI 环境变量加载到非空的 C 串中

* 为调试而捕捉 CGI 状态

如何写CGIC应用程序

任何cgic 应用程序必须连接到cgic.c,如果在Linux 下可以用Makefile 做这个工作。

因为CGI 程序需要做一些初始化操作,如获取环境变量,分析数据等,所以cgic 库提供了自己的main()函数,那自己写的cgic程序不能再包含main()函数,而必须以cgiMain()函数开始,cgic.c会调用这个函数。当然这个函数名是可以更改的.还要注意的是,自己编写的cgic 程序必须包含#include<cigi.h>

也就是说cgic,已经做了一些相关的解析工作,在自己的main函数中只要调用cigic 中相应的函数便可。

以下是cigic 库里自带的cgic test程序的cgiMain()

  1. int cgiMain() {
  2. #ifdef DEBUG
  3. LoadEnvironment();
  4. #endif /* DEBUG */
  5. /* Load a previously saved CGI scenario if that button
  6. has been pressed. */
  7. if (cgiFormSubmitClicked("loadenvironment") == cgiFormSuccess) {
  8. LoadEnvironment();
  9. }
  10. /* Set any new cookie requested. Must be done *before*
  11. outputting the content type. */
  12. CookieSet();
  13. /* Send the content type, letting the browser know this is HTML */
  14. cgiHeaderContentType("text/html");
  15. /* Top of the page */
  16. fprintf(cgiOut, "<HTML><HEAD>\n");
  17. fprintf(cgiOut, "<TITLE>cgic test</TITLE></HEAD>\n");
  18. fprintf(cgiOut, "<BODY><H1>cgic test</H1>\n");
  19. /* If a submit button has already been clicked, act on the
  20. submission of the form. */
  21. if ((cgiFormSubmitClicked("testcgic") == cgiFormSuccess) ||
  22. cgiFormSubmitClicked("saveenvironment") == cgiFormSuccess)
  23. {
  24. HandleSubmit();
  25. fprintf(cgiOut, "<hr>\n");
  26. }
  27. /* Now show the form */
  28. ShowForm();
  29. /* Finish up the page */
  30. fprintf(cgiOut, "</BODY></HTML>\n");
  31. return 0;
  32. }
  1. #ifdef DEBUG
  2. LoadEnvironment();
  3. #endif /* DEBUG */

一般采用以上方式,调用环境变量用作调试。 可以插入语句:"#define DEBUG 1 将DEBUG模式打开。

cgiHeaderContentType("text/html") 这个函数主要是输出Content Type Header,告诉浏览器返回的是一个html页面,当然也可以是"image/gif", "image/jpeg" and "audio/wav

外一点就是,cgi程序输出HTML页面的方式都是使用printf把页面一行一行地打印出来,比如cgictest.c中的这一段代码:
fprintf(cgiOut, "<textarea NAME=\"address\" ROWS=4 COLS=40>\n");
fprintf(cgiOut, "Default contents go here. \n");
fprintf(cgiOut, "</textarea>\n");
上面这段代码的运行结果就是在页面上输出一个textarea。 第一个参数cgiOut实际上就是stdin,所以我们可以直接使用printf,而不必使用fprintf。不过在调试的时候会用到fprintf来重定向输出

CGI 调试起来比较麻烦,CGIC提供了一个函数可以将环境变量输入到文件,方便调试。

    1. cgiWriteEnvironment("/etc/conf.d/c0/capcgi.dat");

cgic 写CGI程序的更多相关文章

  1. 教你用shell写CGI程序

    以前用shell写过一些cgi的例子.今天向大家介绍一下. CGI是一种接口的标准,并不区分编程语言,也就是说,CGI可以用任何一种语言编写,只要这种语言具有标准输入.输出和环境变量.CGI会将标准输 ...

  2. C语言写CGI程序

    一.CGI概述 CGI(公用网关接口)规定了Web服务器调用其他可执行程序(CGI程序)的接口协议标准.Web服务器通过调用CGI程序实现和Web浏览器的交互, 也就是CGI程序接受Web浏览器发送给 ...

  3. 用 c 写 CGI 程序简要指南

    文章摘要:  CGI规定了Web服务器调用其他可执行程序(CGI程 序)的接口协议标准.Web服务器通过调用CGI程序实现和Web浏览器的交互.CGI程序可以用任何程序设计语言编写,如Shell脚本语 ...

  4. 嵌入式开发之cgic库---cgi库的使用

    很幸运!用C语言写CGI程序还可以有比较简单的方式,那就是我们可以借助使用第三方库CGIC(CGIC是一个功能比较强大的支持CGI开发的标准C库,并支持Linux, Unix 和Windows等多操作 ...

  5. 写一个CGI程序并运行

    准备Linux和Apache我在/var/www/cgi-bin/下建一个文件get.c #include <stdio.h> #include <stdlib.h> int ...

  6. C、Shell、Perl基于Tomcat开发CGI程序环境配置

    基于Tomcat7.0版本号配置CGI开发环境,步聚例如以下: 以我的Tomcat7安装文件夹为例:TOMCA_HOME = /Users/yangxin/Documents/devToos/java ...

  7. 第一个CGI程序-----完全就是普通的c语言嘛‘(*∩_∩*)′

    第一个CGI程序 ----完全就是普通的C语言嘛  '(*∩_∩*)′ PainterQ 2017年5月14日 上一篇博文里面叙述了Apache的安装和配置方法,恍恍惚惚我就拥有了自己的第一个http ...

  8. Hello World! 这是我的第一个 CGI 程序

    Hello World! 这是我的第一个 CGI 程序上面的 C++ 程序是一个简单的程序,把它的输出写在 STDOUT 文件上,即显示在屏幕上.在这里,值得注意一点,第一行输出 Content-ty ...

  9. 阶段2-新手上路\项目-移动物体监控系统\Sprint4-嵌入式web服务器开发\第3课-CGI程序开发

    实现CGI程序显示一幅图片最核心的功能 把上一节课编写好的led.c程序拷贝过来,并重新命名为image.c 把led的某些部分删除,后如下 那么如何显示一幅图片呢,百度(搜索在html里面去插入图片 ...

随机推荐

  1. ZOJ Problem Set - 3640 Help Me Escape

    题目大意: 有n条路,选每条路的概率相等,初始能力值为f,每条路通过的难度值为ci,当能力值大于某条路A的难度值b时,能够成功逃离,花费时间ti,小于等于时,不能逃离,天数加一天,但能力值增加b. 给 ...

  2. Hibernate——property的access属性

    public class Customer implements Serializable { private static final long serialVersionUID = 1L;     ...

  3. 全国信息学奥林匹克联赛 ( NOIP2014) 复赛 模拟题 Day1 长乐一中

    题目名称 正确答案  序列问题 长途旅行 英文名称 answer sequence travel 输入文件名 answer.in sequence.in travel.in 输出文件名 answer. ...

  4. UVA-11468 Substring(AC自动机+DP)

    题目大意:给一些模板串,一些字符的出现概率.问不会出现模板串的概率是多少. 题目分析:是比较简单的概率DP+AC自动机.利用全概率公式递推即可. 代码如下: # include<iostream ...

  5. 编码规范(一)之Code Templates的设置(转)

    编码规范(一)之Code Templates的设置 基于公司的主流开发工具为eclipse,但每个人都有自己的编码习惯,为了统一格式,这里通过三个方面:设置Code Templates.Checkst ...

  6. Java跟C.C++相互调用

    //由于诸多误解,我对函数注解说明下,这2个参数谁才是真正的皇帝,谁代替谁了//首先.这个函数是我自己为说明问题写的,由于和头文件写在一起,故此加入这个宏,//不然c++编译器报告类型不对,你懂得// ...

  7. ExtJS布局方式(layout)图文详解

    Auto默认布局 不给下级组件指定大小和位置 Absolute绝对布局 可使用坐标(x.y)进行布局 Accordion手风琴布局 实现Accordion效果的布局,也可叫可折叠布局.也就是说使用该布 ...

  8. Nginx-搭建https服务器

    先看Nginx中的配置 server { listen ; ssl on; ssl_certificate /usr/local/nginx/conf/任意证书名.crt; ssl_certifica ...

  9. Android调用系统分享功能以及createChooser的使用

    工程结构 //效果图 点击测试分享                                                                                   ...

  10. 【转】UVa Problem 100 The 3n+1 problem (3n+1 问题)——(离线计算)

    // The 3n+1 problem (3n+1 问题) // PC/UVa IDs: 110101/100, Popularity: A, Success rate: low Level: 1 / ...