在c中编写unix chmod的简化版本

时间:2011-12-06 00:23:50

标签: c

这是我的代码,但它运行不正常。我需要帮助。即使我写./mychmod 777 text.txt例如它也会阻止所有权利而不是反转。提前谢谢

 #include<stdio.h>
 #include<stdlib.h>
 #include<fcntl.h>
 #include<sys/stat.h>
 #include<sys/types.h>
 #include<unistd.h>

 int isFile(const char *ct){
 int test=0;
 test=open(ct,O_RDONLY) ;
 if(test==-1)
 return 1;
 else
 return 0;
 close(test);
 }

 int main( int nb , char ** args){

 if(nb<3)
 exit(1);
 int nbs=(int)(atoi(args[1]));


  int i=2;
  while(i<nb)
  {

    if(isFile(args[i])==0){
    chmod(args[i],nbs);
    if(chmod(args[i],nbs)==0)
      printf("success\n");
    else
      printf("failed\n");
    }
    else 
    exit(1);



    i++;
}

return 0;

}

1 个答案:

答案 0 :(得分:1)

Chmod传统上采用八进制数字值,因此如果要启用所有访问权限,则使用0777(十进制值511)。您在777中传递并使用atoi将其解析为十进制值,因此您最终得到八进制值1411,这可能是一个错误,因为它大于0777.最好,它是&#39; s根本不是你想要设置的权限。