这是我尝试将权限应用于文件的部分代码。
fd=fopen(file_name,"wb");
fchmod(fd,(mode_t)perm);
其中perm是整数。例如:644或755 我试着没有使用模式进行投射。
答案 0 :(得分:2)
除了已经提到的使用八进制常量的问题之外,你正在错误地调用fchmod
- 原型是:
int
fchmod(int fildes, mode_t mode);
^^^^^^^^^^
但是你传递了FILE *
(由fopen
返回)作为第一个参数!使用open
代替fopen
,这样您就可以使用int fildes
进行游戏,或者使用带有文件名的chmod
。
这里有两个重要的带回家信息:
您应该始终启用编译器警告,并注意任何警告。如果您已经这样做了,那么很明显您错误地调用了fchmod
。
fchmod
之类的通话会返回状态 - 您不应该忽略这一点!在您的情况下,它很可能是非零的,因为您传递了无效的fildes
参数。因此,即使代码是正确的,您仍然可以从非零状态中学到一些东西。
答案 1 :(得分:1)
应为0644
或0755
。那些是八进制常量,让他们有道理。
0644表示对所有者进行读/写(6);只读组和世界。
0755表示对所有者进行读/写/执行(7);读/执行组和世界。
答案 2 :(得分:0)
当您需要应用文件权限时,您需要使用八进制值!当你使用整数值时,它的无效
试试这个 -
int perm = 0644; // or use mode_t perm = 0644;
fd=fopen(file_name,"wb");
fchmod(fd,perm);