cgic简介
Posted jiangwei0512
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cgic简介相关的知识,希望对你有一定的参考价值。
简介
cgic是一个C库,用来支持CGI编程,该库符合ANSI-C标准,所以有较好的移植性。
这里将使用MinGW作为编译器,依赖cgic库,完成基本的CGI的开发。
cgic库源码可以在https://github.com/boutell/cgic下载到,MinGW的安装可以参考[C++]环境配置和使用。
将下载到的cgic库(其实就是几个c文件和h文件),放到cgi-bin目录下,如下所示:
红框部分就是源码,主要还是cgic.c和cgic.h两个文件,其它的两个文件其实是测试用的。Makefile也是cgic的一部分,不过经过了修改,以下是修改之后的内容:
CFLAGS=-g -Wall
CC=gcc
AR=ar
RANLIB=ranlib
LIBS=-L./ -lcgic
OBJECTS = cgictest.cgi
all: libcgic.a $(OBJECTS)
libcgic.a: cgic.o cgic.h
$(AR) rc libcgic.a cgic.o
$(RANLIB) libcgic.a
%.cgi: %.o libcgic.a
$(CC) $< -o $@ ${LIBS}
clean:
del *.o *.a *.cgi
配置好MinGW之后,直接在当前目录执行make就可生成库文件libcgic.a和测试CGI文件cgictest.cgi。
通过在网页输入http://localhost/cgi-bin/cgictest.cgi:
以上是cgic库自带的例子,下面将使用cgic库来编译一个简单的示例(cgi-bin\\hellocgic.c):
// include the cgic.h.
#include "cgic.h"
// CGi using cgic has the entry of cigMain.
int cgiMain()
{
// Send the content type, letting the browser know this is html.
cgiHeaderContentType("text/html");
// Ouput HelloWorld page.
fprintf(cgiOut, "<html>\\n");
fprintf(cgiOut, "<head>\\n");
fprintf(cgiOut, "<title>Hello CGIC</title>\\n");
fprintf(cgiOut, "</head>\\n");
fprintf(cgiOut, "<body>\\n");
fprintf(cgiOut, "<h2>Hello CGIC! I am a CGI!</h2>\\n");
fprintf(cgiOut, "</body>\\n");
fprintf(cgiOut, "</html>\\n");
return 0;
}
然后将hellocgic.cgi写入Makefile文件,主要修改下面一行,增加hellocgic.cgi:
OBJECTS = cgictest.cgi hellocgic.cgi
之后make编译之后得到hellocgic.cgi。在网页输入http://localhost/cgi-bin/hellocgic.cgi:
回到代码,相比于helloworld.cgi代码,这里的主要差异是:
- 入口不再是
main()
,而是cgiMain()
,真正的main()
函数实际上在cgic.c中:
int main(int argc, char *argv[]) {
int result;
// 中间略
result = cgiMain();
return result;
}
- 使用
cgiHeaderContentType()
来声明网页类型,其实现没有什么特别的:
void cgiHeaderContentType(char *mimeType) {
fprintf(cgiOut, "Content-type: %s\\r\\n\\r\\n", mimeType);
}
- 使用
cgiOut
来输出,而不是像之前那样用printf()
,这里的cgiOut
是一个FILE*
类型的全局变量,在main()
函数中有初始化:
cgiOut = stdout;
所以本质上跟printf()
也没有差异。
以上一个最简单的cgic库示例,后面将更详细的介绍cgic库。
以上是关于cgic简介的主要内容,如果未能解决你的问题,请参考以下文章
用php写一个网页程序,功能是判断服务器上QQ程序运行了多长时间