2014-01-15 57 views
3

我想在C程序搭配chmod不能给所有权限

chmod("/tmp/toBoard", S_IRWXU | S_IRWXG | S_IRWXO); 

但程序运行后,我检查权限使用chmod功能来更改文件权限并只获得

-rwxr-xr-x 1 root root 

我运行这个程序在Linux嵌入式板上。 toBoard是来自/ var目录中其他文件的copied inside the program文件,源文件具有所有权限(从终端手动设置)。当我试图手动复制它,并设置它的工作权限,但是当我复制的文件,并尝试给它的所有权限 - 失败没有错误

copy("/var/www/defaults.dat", "/tmp/toBoard"); 
int err; 
if(err = chmod("/tmp/toBoard", S_IRWXU | S_IRWXG | S_IRWXO)){ 
    perror("chmod"); 
} 
struct stat buffer; 
int status = stat("/tmp/toBoard", &buffer); 

如何设置的所有权限绿灯?

+2

您必须将其作为所有者运行,在本例中为root。但是除非你真的必须这样做,否则你不应该使用root,当然也不要这样做。 – Kevin

+0

这工作正如我所见。必须'#include ''得到S_IRWXU等常数 – Vorsprung

+0

以root身份运行。我需要这个能够从网页重写这个文件,但它没有权限。 Vorsprung,包含了所有需要的常量,你试过了你的建议,它也没有帮助 – PaulPonomarev

回答

7

就目前而言,您的调用是正确的,但可能会失败,并且您没有检查返回的代码。你可以尝试:

if (chmod("/tmp/toBoard", S_IRWXU | S_IRWXG | S_IRWXO)) { 
    perror("chmod"); 
    /* more error handling. */ 
} 

在这种情况下,它可能是“权限被拒绝”的情况。

+0

完成那样 - 没有错误 – PaulPonomarev

+0

@PaulPonomarev'/ tmp /'是以一种有趣的方式挂载的吗?如果你尝试一个不同的文件会发生什么? – cnicutar

+0

我编辑了主要问题来回答你的问题。/tmp是电路板上的一个文件夹,在重启后清空 – PaulPonomarev