为什么我的fopen后面的参数不能用"r+"??

create3000 2006-06-19 09:23:59
我是一个初学者。
现在在Red Hat 9上面,使用Apache,版本不知道,反正是自带的那个。
我用c语言写了一个CGI程序,需要打开一个文件,需要写入。代码如下:
FILE *in;
in = open("文件名","r+");
fputs(buf, in);
fclose(in);
把"r+"换成"r"就能使用,但是不能写入。为什么呀?
...全文
225 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
create3000 2006-06-20
  • 打赏
  • 举报
回复
多谢。
还需要好好学习呀。
newzy 2006-06-20
  • 打赏
  • 举报
回复
web 服务器, 如apache 等一般要求不能以 root 的身份运行
注: 以 root 方式启动后, web 服务一般会再以 nobody 身份(或用户强制指定的身份)
重新启动一个新的进程, 并退出自己. 原因是以 root 用户启动具有很大的安全隐患,

nobody 不属于已定义的任何组, 故属于其它组.
从你列出的权限 其它组只有 -x 权限, 显然 cgi 程序无法进行读写操作.

依照前面提到的方法, 根据你的具体情况设定下目录的读写权限.
祝你好运!
create3000 2006-06-20
  • 打赏
  • 举报
回复
权限都是 -rwxr-xr-x
应该可以运行。
我看了httpd.conf配置文件了,里面说有一些用户是没有写权限的。
里面默认的apache用户,我想把它改为root,可是改后httpd不能启动了。

请问那个用户可以有写的权限呀?
newzy 2006-06-20
  • 打赏
  • 举报
回复
ls -al <目录名>/.. -R
把权限列出来看看
ykj76 2006-06-19
  • 打赏
  • 举报
回复
r表示只读,,当然不能写了
create3000 2006-06-19
  • 打赏
  • 举报
回复
上面写错了。是:
in = fopen("...","r+");
create3000 2006-06-19
  • 打赏
  • 举报
回复
多谢,还是不行。
那个在shell下可以运行。有运行权限,哪个要写的文件也有可写的权限。
我在httpd.conf里面也看了用户,它使用的是apache用户,我改为root还是不行。
newzy 2006-06-19
  • 打赏
  • 举报
回复
改下目录的执行权限,
chmod a+rwx <目录名> -R

原因是(默认的)nobody 属于其它组, 一般只有读权限, 无写权限所致.

祝你好运!
create3000 2006-06-19
  • 打赏
  • 举报
回复
多谢。
文件当然存在。
并且在提示行的情况下,使用"r+"是可以的。可以写入文件,没有问题。
只是在网页调用这个cgi文件的时候就在这个地方报错。没有办法设置。
我去下这个工具看看。
newzy 2006-06-19
  • 打赏
  • 举报
回复
ANSI C 规定:
"r+" 表示可读可写, 但有一个前提, 就是文件必须事存在的. 否则返回失败.

请用: "w+" 或 "a+"

REF:
"r+" Opens for both reading and writing. (The file must exist.)

"w+" Opens an empty file for both reading and writing.
If the given file exists, its contents are destroyed.


建议:
C 写 CGI 试试专业开发CGI 的C 工具 CSP/eybuild
http://www.eybuild.com

Good Luck!

2,204

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 CGI
社区管理员
  • CGI社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧