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()
- int cgiMain() {
- #ifdef DEBUG
- LoadEnvironment();
- #endif /* DEBUG */
- /* Load a previously saved CGI scenario if that button
- has been pressed. */
- if (cgiFormSubmitClicked("loadenvironment") == cgiFormSuccess) {
- LoadEnvironment();
- }
- /* Set any new cookie requested. Must be done *before*
- outputting the content type. */
- CookieSet();
- /* Send the content type, letting the browser know this is HTML */
- cgiHeaderContentType("text/html");
- /* Top of the page */
- fprintf(cgiOut, "<HTML><HEAD>\n");
- fprintf(cgiOut, "<TITLE>cgic test</TITLE></HEAD>\n");
- fprintf(cgiOut, "<BODY><H1>cgic test</H1>\n");
- /* If a submit button has already been clicked, act on the
- submission of the form. */
- if ((cgiFormSubmitClicked("testcgic") == cgiFormSuccess) ||
- cgiFormSubmitClicked("saveenvironment") == cgiFormSuccess)
- {
- HandleSubmit();
- fprintf(cgiOut, "<hr>\n");
- }
- /* Now show the form */
- ShowForm();
- /* Finish up the page */
- fprintf(cgiOut, "</BODY></HTML>\n");
- return 0;
- }
- #ifdef DEBUG
- LoadEnvironment();
- #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提供了一个函数可以将环境变量输入到文件,方便调试。
- cgiWriteEnvironment("/etc/conf.d/c0/capcgi.dat");
cgic 写CGI程序的更多相关文章
- 教你用shell写CGI程序
以前用shell写过一些cgi的例子.今天向大家介绍一下. CGI是一种接口的标准,并不区分编程语言,也就是说,CGI可以用任何一种语言编写,只要这种语言具有标准输入.输出和环境变量.CGI会将标准输 ...
- C语言写CGI程序
一.CGI概述 CGI(公用网关接口)规定了Web服务器调用其他可执行程序(CGI程序)的接口协议标准.Web服务器通过调用CGI程序实现和Web浏览器的交互, 也就是CGI程序接受Web浏览器发送给 ...
- 用 c 写 CGI 程序简要指南
文章摘要: CGI规定了Web服务器调用其他可执行程序(CGI程 序)的接口协议标准.Web服务器通过调用CGI程序实现和Web浏览器的交互.CGI程序可以用任何程序设计语言编写,如Shell脚本语 ...
- 嵌入式开发之cgic库---cgi库的使用
很幸运!用C语言写CGI程序还可以有比较简单的方式,那就是我们可以借助使用第三方库CGIC(CGIC是一个功能比较强大的支持CGI开发的标准C库,并支持Linux, Unix 和Windows等多操作 ...
- 写一个CGI程序并运行
准备Linux和Apache我在/var/www/cgi-bin/下建一个文件get.c #include <stdio.h> #include <stdlib.h> int ...
- C、Shell、Perl基于Tomcat开发CGI程序环境配置
基于Tomcat7.0版本号配置CGI开发环境,步聚例如以下: 以我的Tomcat7安装文件夹为例:TOMCA_HOME = /Users/yangxin/Documents/devToos/java ...
- 第一个CGI程序-----完全就是普通的c语言嘛‘(*∩_∩*)′
第一个CGI程序 ----完全就是普通的C语言嘛 '(*∩_∩*)′ PainterQ 2017年5月14日 上一篇博文里面叙述了Apache的安装和配置方法,恍恍惚惚我就拥有了自己的第一个http ...
- Hello World! 这是我的第一个 CGI 程序
Hello World! 这是我的第一个 CGI 程序上面的 C++ 程序是一个简单的程序,把它的输出写在 STDOUT 文件上,即显示在屏幕上.在这里,值得注意一点,第一行输出 Content-ty ...
- 阶段2-新手上路\项目-移动物体监控系统\Sprint4-嵌入式web服务器开发\第3课-CGI程序开发
实现CGI程序显示一幅图片最核心的功能 把上一节课编写好的led.c程序拷贝过来,并重新命名为image.c 把led的某些部分删除,后如下 那么如何显示一幅图片呢,百度(搜索在html里面去插入图片 ...
随机推荐
- ZOJ 3878--解题报告
题目相关: 3878相关链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5526 Edward 打字员习惯于QWERTY键 ...
- Codeforces Round #303 (Div. 2) A 水
A. Toy Cars time limit per test 1 second memory limit per test 256 megabytes input standard input ou ...
- 通过代码设置textview颜色
Resources resource = (Resources) this.getResources(); ColorStateList csl = (ColorStateList) resour ...
- 《Java程序设计》第7周学习总结
学号20145220<Java程序设计>第7周学习总结 教材学习内容总结 12.1认识Lambda语法 12.1.1Lambda语法概览 在java中引入了Lambda的同时,与现有API ...
- phpwind8.7升级9.0.1过程(四)20130207升级到20141228
每一次升级前都要注意备份 1.网站根目录的所有文件 2.网站的数据库 根据phpwind官方教程 更新到20130702版本成功并备份 更新到20140428版本成功并备份 20141228版本的更新 ...
- POJ-1741 Tree (树上点分治)
题目大意:一棵带边权无根树,边权代表距离,求距离小于等于k的点对儿数. 题目分析:这两个点之间的路径只有两种可能,要么经过根节点,要么在一棵子树内.定义depth(i)表示点 i 到根节点的距离,be ...
- spring beans源码解读之--Bean的定义及包装
bean的定义,包装是java bean的基础.再怎么强调它的重要性都不为过,因此深入 了解这块的代码对以后的代码研究可以起到事半功倍的功效. 1. Bean的定义BeanDefinition 1.1 ...
- DNS与DSN
dns是域名系统的缩写 dsn在一些专业书籍中是数据源的缩写
- Firefox-常用扩展
抓包: HttpFox,相比 Firebug 在页面跳转或刷新时依旧保持原有数据 常用User-Agent模拟: User Agent Switcher 更改请求头: ModifyHeaders 更改 ...
- Freezing Your Tuples Off 之 vacuum_freeze_min_age
The vacuum_freeze_min_age setting determines the youngest XID which will be changed to FrozenXID on ...