嵌入式web服务器goahead从移植到使用之cgi

cgi相关的处理程序已经集成到goahead源码了,可通过me.h配置文件中的宏(ME_GOAHEAD_CGI)来选择启用或者不启用,我们不需要添加额外的代码。

官方提供了一个测试用的cgi程序,源码文件是test目录下的cgitest.c,并且已经生成了可执行文件放在test/cgi-bin目录下,但是这个可执行文件是在官方使用的环境中编译的,我们的环境可能无法运行,需要重新编译才可以,编译完后如果可以运行就说明初步成功了。

这里我不使用官方提供的例程,在test/cgi-bin目录下新建cgiTest.c文件,添加如下代码:

#include <stdio.h>
#include <stdlib.h>

int main(int argc,char *argv[])
{
    char *data;
    int i;
    int m = 0,n = 0;

    //这些都是格式要求
    printf("Content-type: text/html\r\n\r\n");
    printf("<TITLE> Multi S</TITLE>\r\n");
    printf("<H3>Multi S</H3>\r\n");
    //读取web网页返回来的数据
    data = getenv("QUERY_STRING");

    printf("<P>%s\r\n",data);
    if(!data)
    {
        printf("<P> ERROR! DATA NO INPUT\r\n");
    }
    //解析数据
    else if(sscanf(data,"%*[^0-9]%d&%*[^0-9]%d",&m,&n) != 2)
    {
        printf("<P> ERROR! DATA GET ERROR\r\n");
    }
    else
    {
        //将解析得到的两个值做乘法,再返回结果
        printf("<P> %d * %d = %d.", m, n, m*n);
    }

    return 0;
}

编译

gcc cgiTest.c -o cgiTest

运行

./cgiTest

执行结果

Content-type: text/html

<TITLE> Multi S</TITLE>
<H3>Multi S</H3>
<P>(null)
<P> ERROR! DATA NO INPUT

这样cgi程序就准备好了,还需要一个对应的web文件,为了方便直接修改test/web目录下的index.html,改成如下的内容:

<html><head><title>index.html</title></head>
<body>
    Hello /index.html
    <h2>cgiTest</h2>
    <form action="/cgi-bin/cgiTest">
        <input type="number" name="var_m" max=9999 />
        </br>
        <input type="number" name="var_n" max=9999 step=100 />
        </br>
        <input type="submit" value="ok" />
    </form>
</body>
</html>

注意/cgi-bin这个路径是在route.txt文件中指定的,如果你要修改成其它路径,那么对应的你也需要在route.txt文件中添加或直接修改,否则的话运行的时候是找不到对应的cgi程序的。

运行goahead服务器看下效果:

./goahead-test -v --home ../../../test/ web

打开浏览器输入网址:

127.0.0.1:18080

显示如下的页面后,我们在两个数值输入框中随便填两个值,然后点击ok按钮即可:

图片

点击ok按钮后,goahead服务器会fork一个进程(源码中用的vfork系统调用,具体可阅读源码cgi.c)来运行我们写的cgi程序,运行结束后goahead就得到了运行结果,最后回写到浏览器就结束了,最终运行效果如下:

图片

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值