chmod无法授予所有权限

3

我正在尝试使用C程序中的chmod函数更改文件权限

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

但是程序运行后,我检查权限时只获得了这些。
-rwxr-xr-x 1 root root

我在嵌入式Linux板上运行此程序。toBoard是一个文件,从/var目录的另一个文件复制到程序中。源文件已经设置了所有权限(通过终端手动设置)。当我尝试手动复制并设置权限时,它可以工作,但是当我复制文件并尝试赋予所有权限时,它会失败而没有错误提示。

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
这对我来说是有效的。必须“#include <fcntl.h>”以获取S_IRWXU等常量。 - Vorsprung
以 root 身份运行。我需要这样才能从网页上重写此文件,但它没有权限。Vorsprung,<sys/stat.h> 包含所有所需的常量,尽管我尝试了您的建议,但也没有帮助。 - PaulPonomarev
1个回答

8

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

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

在这种情况下很可能是 "Permission denied" 的情况。

我已经编辑了主要问题以回答你的问题。/tmp是板子上的一个文件夹,在重启后会被清空。 - PaulPonomarev
所有权限 -rwxrwxrwx - PaulPonomarev
如果我理解正确,您正在询问这个:execve("/bin/chmod", ["chmod", "..."], [/* 19 vars */]) = 0 - PaulPonomarev
没有找到chmod或fchmod函数,只有open、close、write、read access、mmap2、mprotect、munmap、stat64、fstat64和set_tls函数可用。 - PaulPonomarev
@PaulPonomarev 这很奇怪。这是什么系统? - cnicutar
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接