【发布时间】:2015-05-18 02:24:04
【问题描述】:
使用 chmod 我可以分配权限,例如
chmod(file, S_IRUSR);
有没有办法只剥夺用户的读取权限?
我试过了
chmod(file, !S_IRUSR);
和 chmod(文件, -S_IRUSR);
都不行。
【问题讨论】:
标签: c linux unix permissions chmod
使用 chmod 我可以分配权限,例如
chmod(file, S_IRUSR);
有没有办法只剥夺用户的读取权限?
我试过了
chmod(file, !S_IRUSR);
和 chmod(文件, -S_IRUSR);
都不行。
【问题讨论】:
标签: c linux unix permissions chmod
您不能像使用命令行实用程序那样使用chmod(2) 更改单个权限位。您只能设置新的完整权限集。
要实现更改,您需要先读取它们,使用stat(2),从st_mode 字段切换所需的位,然后使用chmod(2) 设置它们。
以下代码将清除test.txt 的S_IRUSR 位,并设置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;
}
【讨论】:
a |= 1 与 a = a | 1 相同。这意味着左侧为 1 的任何位,或者当它们分配给左侧时,右侧将为 1。您可能还想阅读this question。