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. c#实现高精度四舍五入

    /// <summary>        /// 實現數據的四捨五入        /// </summary>        /// <param name=" ...

  2. java for each 错误

    简而言之,for each 适用于不改变数组,容器元素的场合,如果改变,必须用索引或者iterator. 例如: A[] arrayA = new A[5]; for (A a : arrayA) { ...

  3. Android—对话框

    layout文件: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:an ...

  4. Java继承_接口练习题

    1.创建一个名称为StaticDemo的类,并声明一个静态变量和一个普通变量.对变量分别赋予10和5的初始值.在main()方法中输出变量值. 编写代码如下: package org.hanqi.pr ...

  5. Python Tornado

    按照http://www.tornadoweb.cn/所提供的方法下载安装后编写如下程序: import tornado.ioloop import tornado.web class MainHan ...

  6. C# TcpClient TcpListener 简单练习01

    下面是读<Visual C#.Net 网络编程>整理的练习代码. 客户端发送命令给服务端,从服务器端获取所有人员的成绩或者指定人员的成绩. 命令格式为 GET 0|1 [Name].0为获 ...

  7. 一些实用的JS

    1.str.split(/\s+/) 这句是表示以和/\s+/匹配的字符串作为分界,分割字符串str 比如一个空格或者多个或者空格以及回车等  其中+表示一个或者多个 var a = "b- ...

  8. C语言 文件读取

    FILE *fp = fopen("data.txt","rt");fscanf(fp,"%d", &n ); /* 把数据放到数组 ...

  9. 在AndroidStudio中引入SlidingMenu第三方库的步骤

    步骤一:        在GitHub上下载库文件     步骤二:         在需要引入库的项目中导入一个Moudle,如下图:     步骤三:         将下载后的Slidingme ...

  10. Python中urlretrieve函数

    API定义: urllib.request.urlretrieve(url,filename=None,reporthook=None, data=None) 利用urlretrieve() 将数据下 ...