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源码

红框部分就是源码,主要还是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

cgictest
以上是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:

hellocgic
回到代码,相比于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简介的主要内容,如果未能解决你的问题,请参考以下文章

使用cgic库搭配ctemplate编写cgi程序

用php写一个网页程序,功能是判断服务器上QQ程序运行了多长时间

用php写一个网页程序,功能是判断服务器上QQ程序运行了多长时间

《cgic编程 — 实例 》

CGIC库之get与post请求二 多路温度

boa服务器移植与CGIC库的安装使用