当前位置: 技术问答>linux和unix
求助!!在linux下如何用c写CGI文件上传程序遇到的问题。
来源: 互联网 发布时间:2015-06-02
本文导语: 我现在做了一个文件上传的CGI程序,用C++写的;这个程序在window下运行正确,可以收到并建立上传的文件,但是我把它放在linux下,用C来写遇到几个问题: 1、在linux下没有setmode(_fileno(stdin), _O_BINARY)函数;于是我直接...
我现在做了一个文件上传的CGI程序,用C++写的;这个程序在window下运行正确,可以收到并建立上传的文件,但是我把它放在linux下,用C来写遇到几个问题:
1、在linux下没有setmode(_fileno(stdin), _O_BINARY)函数;于是我直接将其注释掉了;
2、我把CreateFile和WriteFile函数改成open和write函数,但但文件无法建立,在调试中表明open函数的返回值为-1。
请问:
1、setmode函数在linux应该用什么函数来代替,是setbuf吗?
2、文件无法建立是什么原因呢,是权限问题吗,应该如何解决?
请各位帮帮忙,解决就结贴;
主要代码如下:
void main()
{
char *data;
int ByteLength;
char *readstr;
int i=0,fd;
data=getenv("CONTENT_LENGTH");
ByteLength=atoi(data);
readstr=(char *)malloc(ByteLength+1);
//setmode(_fileno(stdin), _O_BINARY);/****在linux下没有***/
fread(readstr,ByteLength+1,ByteLength+1,stdin);
readstr[ByteLength]=0;
fd=open("ftpfile",O_RDWR | O_CREAT);
write(fd,readstr,ByteLength);
close(fd);
}
1、在linux下没有setmode(_fileno(stdin), _O_BINARY)函数;于是我直接将其注释掉了;
2、我把CreateFile和WriteFile函数改成open和write函数,但但文件无法建立,在调试中表明open函数的返回值为-1。
请问:
1、setmode函数在linux应该用什么函数来代替,是setbuf吗?
2、文件无法建立是什么原因呢,是权限问题吗,应该如何解决?
请各位帮帮忙,解决就结贴;
主要代码如下:
void main()
{
char *data;
int ByteLength;
char *readstr;
int i=0,fd;
data=getenv("CONTENT_LENGTH");
ByteLength=atoi(data);
readstr=(char *)malloc(ByteLength+1);
//setmode(_fileno(stdin), _O_BINARY);/****在linux下没有***/
fread(readstr,ByteLength+1,ByteLength+1,stdin);
readstr[ByteLength]=0;
fd=open("ftpfile",O_RDWR | O_CREAT);
write(fd,readstr,ByteLength);
close(fd);
}
|
O_RDWR 这个mode你查一下,我刚才man了一下,好像没看到哦。
你程序要处理错误返回啊,看看报的什么错。
你程序要处理错误返回啊,看看报的什么错。
|
顺便问问,Linux的文件操作是不是区分二进制文件和文本文件吧?
CGI的用户权限默认是nobody,估计对cgi-bin没有写权限,否则后果不堪设想?(每个人都可以向这个文件夹添加自己的一些特定程序)
再问问,传上来的文件编码格式到底是什么?是不是要在这里进行解码?跟Content-type相关,java相关的代码例子倒是有些。值得参考!
CGI的用户权限默认是nobody,估计对cgi-bin没有写权限,否则后果不堪设想?(每个人都可以向这个文件夹添加自己的一些特定程序)
再问问,传上来的文件编码格式到底是什么?是不是要在这里进行解码?跟Content-type相关,java相关的代码例子倒是有些。值得参考!