免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2258 | 回复: 2
打印 上一主题 下一主题

请教CGI程序传递参数问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-10-23 15:49 |只看该作者 |倒序浏览
我在开发板上移植好boa后,想测试CGI程序.

我的CGI程序:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <string.h>

#define IOCTL_LED_ON    0
#define IOCTL_LED_OFF  1
#define MAX_ARG        150

int main(void)
{
        unsigned int led_no;
        int fd = -1;

        char *buf = getenv("QUERY_STRING");
        if (buf == NULL)
                return -1;
        char para1[MAX_ARG], para2[MAX_ARG];
        char value1[MAX_ARG], value2[MAX_ARG];

        char *p = strchr(buf, '&');
        *p = '\0';
        strcpy(para1, buf);
        strcpy(para2, p + 1);

        p = strchr(para1, '=');
        *p = '\0';
        strcpy(value1, p + 1);

        p = strchr(para2, '=');
        *p = '\0';
        strcpy(value2, p + 1);

        int num, status;

        num = atoi(value1);
        status = atoi(value2);
        fd = open("/dev/mini2440_led", 0);
        if (fd < 0)
        {
                return -1;
        }
        

        if ((num - 1) > 3)
        {
                goto err;
        }


        ioctl(fd, status, num);

        close(fd);

        return 0;

err:
        if (fd > 0)
                close(fd);
        return -1;

}

我网页中的 form

<html>
<head> <title>LED Control </title> </head>
<body>
<h1>This is my first web program </h1>
<img align="middle" src="success.jpg">
<br>
<br>
<form method="GET" action="/cgi-bin/led">
<h2>Input led number: </h2>
NO.: <input type=text name=no> <br>
<h3>(Notice!! the number is: 1-6) </h3> <br>
Status: <input type=text name=status>

<h3>Notice!!(1: on, 0: off) </h3> <br>
<p align="center"> <input type=submit value="  确定">
</form>
<p align="center">
</body>
</html>


提交数据后, 参数应该是 "no=xx&status=xxx"
我在CGI程序中,用getenv("QUERY_STRING");获取参数,不知这样做对不对?

结果网页提交数据后出现以下错误:
502 Bad Gateway
The CGI was not CGI/1.1 compliant.

我CGI的makefile
CC = /usr/local/arm/3.4.1/bin/arm-linux-gcc
test_led : test_led.c
        $(CC) test_led.c -o test_led

请问我这样做对不对,不对该怎么样改,才能通过网页传递参数给CGI程序?

论坛徽章:
0
2 [报告]
发表于 2009-10-23 22:26 |只看该作者
cgi 程序不是应该从命令行来获得参数吗?
难道要用环境变量中获得吗?

论坛徽章:
8
2015年辞旧岁徽章
日期:2015-03-03 16:54:15午马
日期:2015-02-04 12:00:07羊年新春福章
日期:2015-02-04 11:57:56双子座
日期:2014-12-02 11:44:59金牛座
日期:2014-10-08 16:47:08狮子座
日期:2014-08-29 13:37:46巳蛇
日期:2014-08-26 17:32:29NBA常规赛纪念章
日期:2015-05-04 22:32:03
3 [报告]
发表于 2009-10-24 13:23 |只看该作者

回复 #1 tancotq 的帖子

CGI使用getenv("QUERY_STRING");獲取網頁的參數是沒有問題的。只是有字數的限制,最多992個(我記不清楚了)。
樓主先確認在不傳遞參數的情況下,點擊網頁的按鈕,看是否還報錯。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP