1、学习用c/c++写cgi程序

简介:     CGI全称Common Gateway Interface(共同编程接口),是一种编程接口,不论什么语言,只要按照该接口的标准编写出来的程序,即可叫做CGI程序。CGI 程序的输入/输出是使用编程语言的标准输入/标准输出,所以用C/C++来写 CGI 程序就好象写普通程序一样。

    CGI全称Common Gateway Interface(共同编程接口),是一种编程接口,不论什么语言,只要按照该接口的标准编写出来的程序,即可叫做CGI程序。CGI 程序的输入/输出是使用编程语言的标准输入/标准输出,所以用C/C++来写 CGI 程序就好象写普通程序一样。

1)CGI 程序的通信方式

    当有数据从浏览器传到 Web 服务器后,该服务器会根据传送的类型(基本有二类:GET/POST),将这些接收到的数据传入QUERY_STRING或变量中CGI程序可以通过标准输入,在程序中接收这些数据。当要向浏览器发送信息时,只要Web服务器发送特定的文件头信息,即可通过标准输出将信息发往Web服务器Web服务器处理完这些由CGI程序发来的信息后就会将这些信息发送给浏览器。这样就是CGI程序的通信方式了。

2)接收数据

    GET方式接收到的数据保存在Web服务器的QUERY_STRING变量里,而通过POST方式接收到的数据是保存在这个Web服务器变量里。它们的唯一区别就是:以GET方式接收的数据是有长度限制;而用POST方式接收的数据是没有长度限制的。并且,以GET方式发送数据,可以通过URL的形式来发送,但POST方式发送的数据必须要通过Form才到发送。

将程序用gcc编译,结果放在放在/cgi/bin目录下,在brower中输入

程序示例

img_1c53668bcee393edac0d7b3b3daff1ae.gif img_405b18b4b6584ae338e0f6ecaf736533.gif helloword.c
#include <stdio.h>
main()
{
printf(
"Content-type:text/html\n\n"); //文件显示类型
printf("Hello,World!"); //显示内容
}

http://localhost/cgi-bin/helloworld

则可输出hello,world

see more in 【1

3、使用cgi处理get和post的数据请求简单示例

说明:apache+suse10.1

cgi程序

img_1c53668bcee393edac0d7b3b3daff1ae.gif img_405b18b4b6584ae338e0f6ecaf736533.gif View Code
#include <stdio.h>
#include
<stdlib.h>

#define MAXLEN 80

int main(void)
{
long len;
char *lenstr, poststr[80];
printf(
"Content-Type:text/html\n\n");

char *pRequestMethod;
setvbuf(stdin, NULL, _IONBF,
0); /*turn off stdin's cache*/

pRequestMethod
= getenv("REQUEST_METHOD");

if (strcmp(pRequestMethod, "POST") == 0)
{
printf(
"<TITLE>This is Post operation</TITLE>\n");
lenstr
= getenv("CONTENT_LENGTH");
//if(lenstr == NULL || len > MAXLEN)
if(lenstr == NULL)
{
printf(
"<P>Post form error");
}
else
{
len
= atoi(lenstr);
fgets(poststr, len
+ 1, stdin);
printf(
"%s",poststr);
}
}
if (strcmp(pRequestMethod, "GET") == 0)
{
printf(
"<TITLE>This is Get operation</TITLE>\n");
char *qa;
printf(
"<TITLE>The reault of Get is:\n</TITLE>\n");
qa
= getenv("QUERY_STRING");
printf(
"%s",qa);
}
return 0;
}

html程序

<html>
<body>
<h1>It works!</h1>
<h2>I am here!</h2>

<FORM ACTION="./cgi-bin/getpost" METHOD="get">
<INPUT TYPE="text" NAME="Text" VALUE="This is get operation">
<INPUT TYPE="submit" VALUE="Get"></INPUT>
</FORM>
<BR> 

<FORM ACTION="./cgi-bin/getpost" METHOD="post">
<INPUT TYPE="text" NAME="Text" VALUE="This is post operation">
<INPUT TYPE="submit" VALUE="Post"></INPUT>
</FORM>
<BR>

</body>
</html>

1http://lzquan.iteye.com/blog/286551

1 http://blog.csdn.net/lanmanck/article/details/5359403

2 http://gaodi2002.blog.163.com/blog/static/232076820106352058738/

目录
相关文章
|
14天前
|
C++
c++的学习之路:27、红黑树
c++的学习之路:27、红黑树
30 4
|
14天前
|
Java C++
C++的学习之路:21、继承(2)
C++的学习之路:21、继承(2)
18 0
|
14天前
|
编译器 C语言 C++
c++的学习之路:19、模板
c++的学习之路:19、模板
32 0
|
14天前
|
设计模式 存储 Android开发
c++的学习之路:18、容器适配器与反向迭代器
c++的学习之路:18、容器适配器与反向迭代器
19 0
|
14天前
|
存储 算法 C++
c++的学习之路:17、stack、queue与priority_queue
c++的学习之路:17、stack、queue与priority_queue
30 0
|
14天前
|
存储 C++ 容器
c++的学习之路:26、AVL树
c++的学习之路:26、AVL树
27 0
|
14天前
|
编译器 C++
c++的学习之路:22、多态(1)
c++的学习之路:22、多态(1)
21 0
c++的学习之路:22、多态(1)
|
14天前
|
安全 编译器 程序员
c++的学习之路:20、继承(1)
c++的学习之路:20、继承(1)
28 0
|
7天前
|
编译器 C语言 C++
【C++入门学习指南】:函数重载提升代码清晰度与灵活性
【C++入门学习指南】:函数重载提升代码清晰度与灵活性
18 0
|
8天前
|
运维 Serverless Go
Serverless 应用引擎产品使用之在阿里云函数计算中c++模板,将编译好的C++程序放进去部署如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
10 1