CGI是指web服务器调用编程语言编写的流程的一个接口。比如我们可以编写一个用户注册的界面,用户将其输入的邮件、用户名、密钥输入并点击注册,此时浏览器就将用户输入的内容发送给了我们后台的CGI程序,我们的CGI程序接受到其他资料,可以对其进行处理。比如送入、分析输入的资料是否非法等。

主流的CGI程序用Perl编写,Perl是一款超强的插件语言,但是我这儿不太懂,我也不去比较某两个语言间的好坏。我说一下用C和C++如何编写CGI程序,告诉你们用C语言也能编写web应用程序,用C语言也能写一个网站。

1.准备工作

首先要先安装一款web服务器。我就用windows功能下的Apache,其实Linux下大同小异,应该需要增设的东西多一些。

你们可以在apache网站下载最新版的Apache for Windows,月亮也是下载:。安装后打开安装目录,大致就是这样一些文档:

看到那种“cgi-bin”了吗,这是默认的cgi程序目录。当然,我们也可以手动设置其位置:用记事本打开conf/httpd.conf,这是Apache的顶配文档。找到类似上面这一行

ScriptAlias /cgi-bin/ "d:/Program Files (x86)/Apache Software Foundation/Apache2.2/cgi-bin/"

"/cgi-bin/"指出web地址,譬如默认是,即访问cgi的根目录。"d:/Program Files (x86)/Apache Software Foundation/Apache2.2/cgi-bin/"指出对应的绝对路径。这也是不难理解,我们浏览器访问就是代表访问了服务器上的相应的绝对路径。所以修改这个绝对路径,就可以指定我们的CGI程序存放的根目录。

我这儿就不改了,一会我们写好的CGI程序直接放到这个cgi-bin文件夹下,再通过访问即可。

2.直到写程序

用VS2010新建一个控制台应用程序工程,我的叫做cgi_test。在main函数里写

printf("Content-type:text/html\n\n");

printf("hello world!!");

其实也可以用C++的cout来替代printf输出。先别急着编译,我们先在工期上点光标,选择特性:

在顶配设置-常规中,更改输出目录为cgi-bin下。我就改成cgi-bin\test\,这种我们生成的可执行文档都会被放置这儿。目标文件的扩展名我也顺便从exe改成cgi,所以不改,迅雷等下载可能会让你下载而不是让浏览器解析它。

再就可以编译了。F7编译后,我们回到cgi-bin/test/中,就可以看见我们编译生成好的"cgi_test.cgi"文件。

打开浏览器,输入,就可以看见hello world了:

这就是我们的第一个cgi程序。

3.如何写一个CGI程序

刚才写程序的工作是我来完成的c语言入门,但是那两个语句很简单,但有的同学会问为什么要怎么写。

我简单解释一下,第一个printf输出的"Content-type:text/html\n\n"是一个文件的标识,告诉浏览器以html的句子来解析此文档,而不是去下载它(切记末尾需要两个换行,即一个空行,这是标准)。只要我们需要输出内容到浏览器,都得加这一句话在最前面,忘记就好。

中间的printf就是输出到浏览器上的资料,提醒需要用html的句子才能正常显示在浏览器上。比如换行,需要用
,而不是\n了。不懂的去学习关于html的常识(因为不学习html就别想做一个网站或web程序)。

如果,只要借助printf,就可以将任何html源码输出在浏览器里。而且,因为是用C/C++写的流程,但是C/C++下的所有函数,都可以用在CGI程序里。(也包含windowsAPI)

比如,用户提交好了注册列表,将资料传递给我的CGI程序,我就可以读取ODBC的变量c语言入门,打通,将资料写入。也可以通过if判断句,来检查用户能否输入了合法资料。

不过有学生又要问了,用户提交的资料如何就传给我们的CGI程序了呢?程序又是什么接受这种数据?

4.接受GET或POST来的资料

因为不知道GET和POST的含义,我建议你还是去看一下PHP。我这儿只简单地提一下,我们新建一个html页面,在其中添加一个表单,其中有一个文本框和一个按钮,大致代码如下:

输入内容:

你们可以看见,form有个特性method,认为你用多少方法报送(post或get),action属性指出出具的地址。get方法报送,含义就是把提交的内容放到地址前面,用?隔开。post提交就是把数据放到数据包里发送给目标地址。我们在文本框内填入信息,点击页面提交,我们填入的资料都会以对应方法发送到目标地址。

C程序接受POST过来的资料比较简单。因为post来的资料都在输入流里,直接scanf或cin>>就能调用了。

GET来的资料在地址栏里,我们需要用到一个C库中的变量:getenv,它的效果是获取环境变量,其中包含获取GET来的资料。(获取?后的一切内容:getenv("QUERY_STRING"))

关于这个变量的一切用法我放到附件里,下载可查。

5.做个示范

int _tmain(int argc, _TCHAR* argv[])

{

printf("Content-type:text/html\n\n");

printf("%s",getenv("QUERY_STRING")); //打印get获取的信息

char szPost[256];

gets(szPost);

if(strcmp(szPost,))

printf("%s",szPost); //打印post获取的信息

return 0;

}

用我们刚才的html代码来填写:

填入内容:

post方法获取的资料,提醒地址栏:

get方法获取的资料,提醒地址栏:

至于get方法获取的资料打印出来前面为什么有乱码,因为我顺便把没有信息的szPost也打印了。实际使用的时候也是先分析szPost中能否有资料再打印。

今天写的够多了。大致C/C++处理CGI就是这样子,你可以发挥自己的想像,写成一些具备使用价值的流程。我们下次给你们讲一个库,通过这个库,可以很轻松的使用cgi编写web应用程序。

本文来自电脑杂谈,转载请注明本文网址:

http://www.pc-fly.com/a/jisuanjixue/article-118963-1.html

c语言编制编程语言,C语言CGI编程入门(一)相关推荐

  1. 【C语言】初始C语言系列 代码详解 _ 编程入门 _【内附代码和图片】_ [初阶篇 _ 总结复习]

    [前言] 本篇文章为初始C语言部分,C语言是编程的入门语言,所以也说是编程入门: 学好C语言的入门内容,才能真正的入门编程,而C语言的学习对于刚入门的同学还是有一些难度的,需要踏踏实实的自己去理解. ...

  2. 树莓派WEB服务器(Boa)CGI编程入门

    通过上一个课程"Boa基本设置与使用"的学习,大家在树莓派上应已经会安装.配置.运行Boa服务器,并且访问到服务器上的一个静态网页. 这不是运行Web服务器最终的目的,最终应是通过 ...

  3. c语言 cgi php,C语言CGI编程入门(一)

    CGI是指web服务器调用编程语言编写的程序的一个接口.比如我们可以编写一个用户注册的页面,用户将其输入的邮箱.用户名.密码输入并点击注册,此时浏览器就将用户输入的内容发送给了我们后台的CGI程序,我 ...

  4. 用c语言编一元二次方程的思路,[编程入门]自定义函数求一元二次方程 (C语言代码)...

    解题思路:题目要求的是调用三个函数分别解决当根的判别式大于0.小于0等于0的三种情况,分别调用不同的函数来解出方程的x1和x2 注意事项: 参考代码: #include #include //根的判别 ...

  5. 会c 学plc编程语言,想学PLC编程?先弄清5种PLC专用语言!

    PLC目前有5种标准的编程语言,包含图形化编程语言和文本化编程语言. 图形化编程语言包含:梯形图(LD-Ladder Diagram).功能块图(FBD - Function Block Diagra ...

  6. Computer:少儿编程—每个人都应该学习编程,它能教你如何思考—编程入门的简介(编程语言的特点种类开发工具对比人类语言)、编程应用、编程意义之详细攻略

    Computer:少儿编程-每个人都应该学习编程,它能教你如何思考-编程入门的简介(编程语言的特点&种类&开发工具&对比人类语言).编程应用.编程意义之详细攻略 导读:乔布斯说 ...

  7. 机器人编程语言python-机器人编程常用的四大语言

    机器人的开发语言一般为C.C++.C++ Builder.VB.VC等语言,主要取决于执行机构(伺服系统)的开发语言:而机器人编程分为示教.动作级机器人编程语言.任务级编程语言三个级别:机器人编程语言 ...

  8. 计算机编程语言及C语言简介,编程语言基础:C语言

    <编程语言基础:C语言>通过大量实例,深入浅出地介绍了C语言的各种数据类型,运算符,表达式:结构化程序设计语句:函数的概念和用法:编译预处理命令:位运算:文件的操作:算法的基本表示方法及结 ...

  9. 脚本语言和编程语言的区别

    脚本语言和编程语言的区别 计算机语言的种类非常的多,总的来说可以分成机器语言,汇编语言,高级语言三大类. 1 . 计算机所能识别的语言只有机器语言,即由0和1构成的代码.但通常人们编程时,不采用机器语 ...

最新文章

  1. 365篇原创后,有三AI喊你正式加入来不来?
  2. 关于汇编跟C/C++已经java的内存理解
  3. unity3d 随机生成地形之随机山脉
  4. Hike on a Graph HDU - 1252(bfs)
  5. 深入理解ARM体系架构(S3C6410)---PWM实例
  6. android唯一机器码生成方案_分布式系统唯一ID生成方案汇总
  7. 设计大师Donald Norman和Bill Buxton签书会在南京举行
  8. 【高并发高性能高可用之海量数据MySQL实战】-提纲目录-不断更新中...
  9. 读书百客:《陋室铭》赏析
  10. 独立站的SEO搜索引擎优化
  11. java编程基础笔记_Java编程基础阶段笔记 day01 Java语言概述
  12. c语言中指针用法初级,C语言中各类指针的用法(小结)
  13. Java实验——编写一个程序,实现字符串大小写的转换并倒序输出
  14. 小米官宣:手表Color 2来了,6色多彩表带,你喜欢哪个?
  15. 一只喵的西行记-10 哲学家H+计划
  16. 软件测试 - 测试用例常见面试题
  17. 英语听力挑战微信小程序
  18. 张丹带你用R语言开始量化投资
  19. 互联网,就是一家007的大茶馆
  20. element ui背景图_vue项目elementUi照片墙图片预览

热门文章

  1. abstract和interface
  2. 216. Combination Sum III
  3. C# 对象名无效 问题
  4. Hibernate 笔记 缓存
  5. MySql like 查询 变向写法(不用like 完成like查询)
  6. [第一财经周刊] 疯狂的团购
  7. 2.5 Hive中外部表的讲解
  8. u3d:动态的用代码调节材质球的属性
  9. JavaScript 笔记Day1
  10. 获取 input 单选框和多选框的值