使用chmod,我可以分配如下权限

chmod(file, S_IRUSR);

有没有办法只从用户那里拿走读取权限?
我试过了
chmod(file, !S_IRUSR);


chmod(文件,-S_IRUSR);
都没用。

最佳答案

不能像使用命令行实用程序那样使用chmod(2)更改单个权限位。只能设置新的完整权限集。
要实现更改,您需要首先使用stat(2)读取它们,从st_mode字段切换所需的位,然后使用chmod(2)设置它们。
以下代码将清除S_IRUSRtest.txt位,并设置S_IXUSR位。(为简洁起见,省略了错误检查。)

#include <sys/stat.h>

int main(void)
{
    struct stat st;
    mode_t mode;
    const char *path = "test.txt";

    stat(path, &st);

    mode = st.st_mode & 07777;

    // modify mode
    mode &= ~(S_IRUSR);    /* Clear this bit */
    mode |= S_IXUSR;       /* Set this bit   */

    chmod(path, mode);

    return 0;
}

关于c - 删除文件权限? C程序设计,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29068909/

10-15 15:01