准备Linux和Apache
我在/var/www/cgi-bin/下建一个文件get.c
#include <stdio.h>
#include <stdlib.h> int main(void)
{
char *data;
long m,n;
printf("Content-type: text/html\n\n");
printf("<TITLE>Mult Result</TITLE>");
printf("<H3>Mult Result</H3>"); data = getenv("QUERY_STRING");
if(data == NULL)
printf("<P>Don't transfer data or transfer error");
else if(sscanf(data,"m=%ld&n=%ld",&m,&n)!=)
printf("<P>Error, invalid format, data have to number");
else
printf("<P>%ld and %ld result: %ld", m, n, m * n);
printf("<br><h>Thank you to use the zongshuai webserver</h1>"); return ;
}

然后编译

gcc -o get.cgi get.c

编译完后会生成一个get.cgi文件

然后我配置Apache,我是这么配置的(我的Apache是2.4.23版本)

将LoadModule cgid_module modules/mod_cgid.so前面的#去掉

添加addHandler cgi-script .cgi .pl

然后配置虚拟空间

<VirtualHost *:>
ServerName cgi.xxx.com
ServerAdmin admin@xxx.com
DocumentRoot /var/www/cgi-bin
<Directory "/var/www/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Require all granted
</Directory>
ErrorLog "logs/error.cgi.log"
CustomLog "/var/www/cgi.log" combined
</VirtualHost>

然后重启Apache

在浏览器中输入cig.xxx.com/get.cgi?m=3&n=7

输出如下内容:

Mult Result

3 and 7 result: 21
Thank you to use the zongshuai webserver


以下转自网络
Linux CGI编程基础

1.为什么使用CGI?

    如前面所见,任何的HTML均是静态网页,它无法实现一些复杂的功能,而CGI可以为我们实现。如:a.列出服务器上某个目录中的文件,对目录中的文件进行操作;b.通过CGI实现串口通讯;c.实现数据库接口;d.实现从摄像头读取一张图片显示在网页上… 等等

2. CGI是什么?

    CGI全称是 Common Gate Intergace ,在物理上,CGI是一段程序,它运行在Server上,提供同客户端 Html页面的接口。

3. CGI编程语言

    你可以用任何一种你熟悉的高级语言, C,C++,C shell,Perl和VB都可以。

4. CGI的安全性

    实际上CGI是比较安全的,至少比 那些没有数字签名的ActiveX控件要安全的多。除非你有意在程序里加入了破坏Server的命令, 否则一般不会有什么严重的后果。
简单的说来,CGI是用来沟通HTML表单和服务器端程序的接口(interface)。说它是接口,也就是说CGI并不是一种语言,而是可以被其他语言所应用的一个规范集。理论上讲,你可以用任何的程序语言来编写CGI程序,只要在编程的时候符合CGI规范所定义的一些东西就可以了。由于C语言在平台无关性上表现不错(几乎在任何的系统平台下都有其相应编译器),而且对大多数程序员而言都算得上很熟悉(不像Perl),因此,C是CGI编程的首选语言之一。这儿我们介绍的,就是如何使用C来编写CGI程序。
作为CGI编程的最为简单的例子,就是进行表单的处理。因而在这篇文章中,我们主要介绍的就是如何用C来编写CGI程序来进行表但处理。

5.传送方法:

    所谓方法是指调用CGI程序的途径。事实上,要执行程序时,你用一种方法向服务器提出请求,此请求定义了程序如何接受数据。 下面介绍常用的两种方法:GET和POST 1.GET 当使用这种方法时,CGI程序从环境变量QUERY_STRING获取数据。
QUERY_STRING 被称为环境变量,就是这种环境变量把客户端的数据传给服务器。为了解释和执行 程序,CGI必须要分析(处理)此字符串。
    POST 使用POST方法时,WEB服务器通过stdin(标准输入),向CGI程序传送数据。服务器 在数据的最后没有使用EOF字符标记,因此程序为了正确的读取stdin,必须使用CONTENT_LENGTH 。当你发送的数据将改变
Web服务器端的数据或者你想给CGI程序传送的数据超过了1024 字节,这是url的极限长度,你应该使用POST方法。 实现方法:
    GET实现方法
    <form name=“guyi‘s form” action=“http://www.yourname.com/cgi/your.cgi” method=GET>

    POST实现方法:
    <form method=post>


写一个CGI程序并运行的更多相关文章

  1. linux常用终端指令+如何用vim写一个c程序并运行

    在装好ubuntu之后今天学习了一些linux的一些基础知识: windows里面打开命令窗口是win+r,在linux系统里面,ctrl+alt+t打开终端,今天的一些指令都是围绕终端来说的 首先s ...

  2. 第一个CGI程序-----完全就是普通的c语言嘛‘(*∩_∩*)′

    第一个CGI程序 ----完全就是普通的C语言嘛  '(*∩_∩*)′ PainterQ 2017年5月14日 上一篇博文里面叙述了Apache的安装和配置方法,恍恍惚惚我就拥有了自己的第一个http ...

  3. [Java] 将标准字符流写入到文件中(通过控制台写一个html程序,并保存)

    package test.stream; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.Fi ...

  4. Hello World! 这是我的第一个 CGI 程序

    Hello World! 这是我的第一个 CGI 程序上面的 C++ 程序是一个简单的程序,把它的输出写在 STDOUT 文件上,即显示在屏幕上.在这里,值得注意一点,第一行输出 Content-ty ...

  5. 利用Python写一个抽奖程序,解密游戏内抽奖的秘密

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 极客挖掘机 PS:如有需要Python学习资料的小伙伴可以加点击下 ...

  6. 写一个ajax程序就是如此简单

    写一个ajax程序就是如此简单 ajax介绍: 1:AJAX全称为Asynchronous JavaScript and XML(异步JavaScript和XML),指一种创建交互式网页应用的网页开发 ...

  7. 学了C语言,如何利用CURL写一个下载程序?—用nmake编译CURL并安装

    在这一系列的前一篇文章学了C语言,如何为下载狂人写一个磁盘剩余容量监控程序?中,我们为下载狂人写了一个程序来监视磁盘的剩余容量,防止下载的东西撑爆了硬盘.可是,这两天,他又抱怨他的下载程序不好用,让我 ...

  8. 用JAVA写一个多线程程序,写四个线程,其中二个对一个变量加1,另外二个对一个变量减1

    package com.ljn.base; /** * @author lijinnan * @date:2013-9-12 上午9:55:32 */ public class IncDecThrea ...

  9. Linux内核学习--写一个c程序,并在内核中编译,运行

    20140506 今天开始学习伟大的开源代表作:Linux内核.之前的工作流于几个简单命令的应用,因着对Android操作系统的情愫,“忍不住”跟随陈利君老师的步伐,开启OS内核之旅.学习路径之一是直 ...

随机推荐

  1. Linux Curl常用命令使用【转】

    Curl是Linux下一个很强大的http命令行工具,其功能十分强大. 1)读取网页 $ curl linuxidc.com">http://www.linuxidc.com 2)保存 ...

  2. GraphLab介绍[转]

    GraphLab介绍 原文链接:http://blog.jasonding.top/2015/06/08/Machine%20Learning/%E5%BC%80%E6%BA%90%E5%9B%BE% ...

  3. spring 加载多个资源文件

    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.Prop ...

  4. 页面加载与iframe加载函数

    <head> <script> $(document).ready(function(){ alert("a");   var wait = documen ...

  5. 线性规划?数学?差分约束?Good Bye 2016 C

    http://codeforces.com/contest/750/problem/C 反正我不会这道题...为什么那么多人做出来了...我好菜.jpg 题目大意:cf每个人都有分数,每次都会在div ...

  6. sql中判断是否存在某个对象

    If object_id(N'对象名',N'对象类型') is not null   例如:表是否存在 if object_id(N'tablename',N'U') is not null begi ...

  7. schema change + ogg 变更手册

    Check OGG  until no data queuing in replication process:testRO:a)login  test5 –l oggmgrb)oggc)#ggsci ...

  8. Windows Shell(外壳)编程相关

    Windows Shell名字空间介绍: http://blog.csdn.net/kingcom_xu/article/details/18943 Windows Shell 外壳编程基础教程(C# ...

  9. vc6.0调试

    调试快捷键 : 逐过程调试-F10        逐语句调试-F11跳到光标处-Ctrl+F10   跳出本循环-Shift+F11   设定断点-F9    删除所有断点-Ctrl+Shift+F9 ...

  10. mysql 数据列按照逗号转成行

    前言: 由于很多业务表因为历史原因或者性能原因,都使用了违反第一范式的设计模式.即同一个列中存储了多个属性值(具体结构见下表). 这种模式下,应用常常需要将这个列依据分隔符进行分割,并得到列转行的结果 ...