博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
cgic 写CGI程序
阅读量:6227 次
发布时间:2019-06-21

本文共 2136 字,大约阅读时间需要 7 分钟。

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]   
 
 
  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. }  

 

[cpp]   
 
 
  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提供了一个函数可以将环境变量输入到文件,方便调试。

 

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

转载地址:http://hpfna.baihongyu.com/

你可能感兴趣的文章
leetcode-686-Repeated String Match(重复多少次A能够找到B)
查看>>
github page+jekyll构建博客的解决方案
查看>>
2013-7-22 确定鼠标与控件位置关系
查看>>
列、约束重命名,原数据不丢失
查看>>
【笔记】老程序员从头开始学JQuery的读书笔记02
查看>>
单点登录系统(一)
查看>>
[转]性能测试之性能计数器和监测工具
查看>>
HZAU1098: Yifan and War3(区间dp)
查看>>
html
查看>>
关于ajax中async: false的作用
查看>>
GitHub帮助文档翻译1——helloWorld
查看>>
文件的下载,随机验证码(无验证)登录注册
查看>>
第27章 java I/O输入输出流
查看>>
search-a-2d-matrix
查看>>
Ubuntu 12.04 Virtualbox 启用USB 设备支持
查看>>
C# DataTable的常用用法讲解
查看>>
〖Linux〗秒开www.stackoverflow.com,非代理方式
查看>>
〖Linux〗Linux的smb地址转换Windows格式(两者互转)
查看>>
mnesia
查看>>
python编程基础之二十一
查看>>