码迷,mamicode.com
首页 > 编程语言 > 详细

【实习记】2014-08-14新版本的apache已默认不支持cgi+C语言中的scanf未解之迷

时间:2014-08-14 23:10:46      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   os   io   for   ar   2014   

 
 

总结1:
ubuntu14.04上的apache2.4.7默认没有cgi模块,而ubuntu10.04是的apache2.2.14默认是有的。

起因:每次都用ubuntu14.04上的VBox里运行的ubuntu10.04上的apache2,感觉略麻烦,于是直接在ubuntu14.04上装个apache2。

发现/cgi-bin/里的cgi总是404,反复确认配置目录没错。

怀疑权限问题(但一般会是5XX而不是404),最后无果。

搜索多次,资料不多,最后找到线索和答案,就是默认不支持了,对于开源软件版本差异巨大问题已见惯不怪,诶,官网没有特别说明。

解决方法:《编译支持cgi的apache》http://www.icycandy.com/blog/compile-cgi-support-for-apache
引用:“在configure时加一个选项–enable-cgi来打开apache的cgi支持”

我打算先用着ubuntu10.04。


晚上以为顺利:谁知又有阻碍。

总结2:
C语言中的scanf未解之迷:最后一个赋值的变量无缘无故多了个分割符。

#include <stdio.h>

int main(int argc, char* argv[]){
    /*  输出如下其中a,1,b,c是输入
     *  login,1,rich,rich,
     *  login;1;rich;rich;
     *  login#1#rich#rich#
     *  a,1,b,c
     *  login,1,rich#rich,
     */
    int type=0;
    char name[32]="\0", password[32]="\0";

    sscanf("login,1,rich,rich", "login,%d,%s,%s", &type, name, password);
    printf("login,%d,%s,%s\n", type, name, password);
    /* login,1,rich,rich, */

    sscanf( "login;1;rich;rich", "login;%d;%s;%s", &type, name, password);
    printf("login;%d;%s;%s\n", type, name, password);
    /* login;1;rich;rich; */

    sscanf( "login#1#rich#rich", "login#%d#%s#%s", &type, name, password);
    printf("login#%d#%s#%s\n", type, name, password);
    /* login#1#rich#rich# */

    scanf("login,%d,%s,%s", &type, name, password);
    printf("login,%d,%s,%s\n", type, name, password);
    /* 末尾总是多一个分割符 */
    return 0;
}

 

许久后才想明白,%s会读取字符,只认空格,制表符做分割;于是%s#%s中的第一个%s把rich#rich读完了!

 

可是输出的最后一行也是很恐怖的错误!

 

【实习记】2014-08-14新版本的apache已默认不支持cgi+C语言中的scanf未解之迷,布布扣,bubuko.com

【实习记】2014-08-14新版本的apache已默认不支持cgi+C语言中的scanf未解之迷

标签:style   blog   http   os   io   for   ar   2014   

原文地址:http://www.cnblogs.com/weishun/p/tencent-shixi-2014-08-14.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!