Chinaunix

标题: 使用c写的cgi程序出现了一个问题,求助 [打印本页]

作者: eggking1102    时间: 2008-12-11 16:16
标题: 使用c写的cgi程序出现了一个问题,求助
写的程序如下:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <error.h>
main()
{
    printf("Content-type:text/html\n\n");
    FILE* my_fp;
    char inputbuf[1024]="cgi work!!";
    int length;
    int i=0;
    length = strlen(inputbuf);
    my_fp = fopen("tmp","w+");
    if(my_fp == NULL)
    {
        printf("open file error!!1");
        return -1;
    }
    printf("begin write!");
    i=fwrite(inputbuf,1,length,my_fp);
    fflush(my_fp);
    printf("i===> %d",i);
    printf("write over!");
     printf("it's work!");
    fclose(my_fp);
}

很简单的一个cgi,将inputbuf中的内容写到文件tmp中
tmp已经建好,权限777设置好了

在本地运行,可以正常写入,没有问题。
通过网页调用cgi就会出问题
程序都运行正常,打印信息正确,fwrite那里输出的数值也是对的
可是文件是空的,就是说,没写进去。。。
找了很久,没找到原因。。。求教啊。。。!!!
谢谢。。。。
作者: meishu    时间: 2008-12-11 17:09
估计是权限问题。你的web服务器没有往那个位置写文件的权限。
作者: aoegiss    时间: 2008-12-11 17:19
试试绝对路径呢
WebServer是否chroot
WebServer什么用户运行的
作者: FuriousFive    时间: 2008-12-11 20:14
两个方法来解决
1,用绝对路径试一下,或者打印一下CGI运行时的目录
2,使用errno来打印一下这个fopen出错的原因
作者: eggking1102    时间: 2008-12-12 09:00
谢谢大家。。。
fopen没有出错。。。
程序也没出错,正常运行,fwrite输出也是正确的
就是没写进文件
绝对路径试过了,也是这样

请问如何修改apache的配置,使得可以往某个文件夹下写呢?
作者: meishu    时间: 2008-12-12 09:30
标题: 回复 #5 eggking1102 的帖子
试试/tmp
作者: FuriousFive    时间: 2008-12-12 09:44
你的cgi运行的时候应该是nobody用户权限的,换成/tmp应该没问题,我觉得还是权限的问题。
作者: nhuczp    时间: 2008-12-12 09:50
原帖由 eggking1102 于 2008-12-11 16:16 发表
写的程序如下:

#include
#include
#include
#include
#include
main()
{
    printf("Content-type:text/html\n\n");
    FILE* my_fp;
    char inputbuf[1024]="cgi work!!";
    int len ...


你这种写法只会在当前所运行的环境下所创建。
判断一下他的返回值fflush(my_fp)。
作者: eggking1102    时间: 2008-12-12 11:29
tmp也不行。。。。。还是写不进去。。。
作者: eggking1102    时间: 2008-12-12 11:33
关键问题啊。。。。fflush返回-1.。。。
作者: eggking1102    时间: 2008-12-12 11:34
原帖由 nhuczp 于 2008-12-12 09:50 发表


你这种写法只会在当前所运行的环境下所创建。
判断一下他的返回值fflush(my_fp)。



那请问下,我要写成cgi写文件,应该如何改动呢?
谢谢

fflush返回-1是什么意思呢?
作者: aoegiss    时间: 2008-12-12 11:36
EBADF  Stream is not an open stream, or is not open for writing.
作者: eggking1102    时间: 2008-12-12 15:11
非常非常感谢大家的帮助,问题已经解决了
不是对所要写的文件设置权限,是对cgi程序设置权限
chmod +s cgi
这样就可以了。。。。郁闷啊




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2