fchmod()无法在C中正确应用文件权限

时间:2014-08-14 06:39:38

标签: c linux filesystems

这是我尝试将权限应用于文件的部分代码。

fd=fopen(file_name,"wb");
fchmod(fd,(mode_t)perm);

其中perm是整数。例如:644或755 我试着没有使用模式进行投射。

3 个答案:

答案 0 :(得分:2)

除了已经提到的使用八进制常量的问题之外,你正在错误地调用fchmod - 原型是:

 int
 fchmod(int fildes, mode_t mode);
        ^^^^^^^^^^

但是你传递了FILE *(由fopen返回)作为第一个参数!使用open代替fopen,这样您就可以使用int fildes进行游戏,或者使用带有文件名的chmod

这里有两个重要的带回家信息:

  1. 您应该始终启用编译器警告,并注意任何警告。如果您已经这样做了,那么很明显您错误地调用了fchmod

  2. fchmod之类的通话会返回状态 - 您不应该忽略这一点!在您的情况下,它很可能是非零的,因为您传递了无效的fildes参数。因此,即使代码是正确的,您仍然可以从非零状态中学到一些东西。

答案 1 :(得分:1)

应为06440755。那些是八进制常量,让他们有道理。

0644表示对所有者进行读/写(6);只读组和世界。

0755表示对所有者进行读/写/执行(7);读/执行组和世界。

答案 2 :(得分:0)

当您需要应用文件权限时,您需要使用八进制值!当你使用整数值时,它的无效

试试这个 -

int perm = 0644; // or use mode_t perm = 0644;

fd=fopen(file_name,"wb"); 
fchmod(fd,perm);