zoukankan      html  css  js  c++  java
  • cgic 写CGI程序

    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()

    [cpp] view plain copy
     
     print?
    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> ");  
    17.   fprintf(cgiOut, "<TITLE>cgic test</TITLE></HEAD> ");  
    18.   fprintf(cgiOut, "<BODY><H1>cgic test</H1> ");  
    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> ");  
    26.   }  
    27.   /* Now show the form */  
    28.   ShowForm();  
    29.   /* Finish up the page */  
    30.   fprintf(cgiOut, "</BODY></HTML> ");  
    31.   return 0;  
    32. }  


     

    [cpp] view plain copy
     
     print?
    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> ");
    fprintf(cgiOut, "Default contents go here. ");
    fprintf(cgiOut, "</textarea> ");
    上面这段代码的运行结果就是在页面上输出一个textarea。 第一个参数cgiOut实际上就是stdin,所以我们可以直接使用printf,而不必使用fprintf。不过在调试的时候会用到fprintf来重定向输出

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

    [cpp] view plain copy
     
     print?
      1. cgiWriteEnvironment("/etc/conf.d/c0/capcgi.dat");  
  • 相关阅读:
    android中Canvas使用drawBitmap绘制图片
    Java Metrics
    HDU 1051:Wooden Sticks
    APK ubuntu下 数字签名
    Qt计算器开发(二):信号槽实现数学表达式合法性检查
    session销毁
    C#多线程编程实例 螺纹与窗口交互
    POJ 1176 Party Lamps (DFS)
    Oracle 六闪回技术,flashback
    can&#39;t connect to mysql server on localhost &lt;10061&gt;
  • 原文地址:https://www.cnblogs.com/lidabo/p/5756266.html
Copyright © 2011-2022 走看看