问题描述:
在使用下面函数设置文件夹访问权限时,发现创建的文件夹的访问权限其实不是自己传进去的mode权限。
int mkdir(const char *pathname, mode_t mode)
原因解释如下:
man 2 mkdir 告诉我们:The argument mode specifies the permissions to use. It is modified by the processâs umask in the usual way: the permissions of the created directory are (mode & ~umask & 0777),意思就是,用mkdir创建的文件夹的访问权限不是mode ,而是mode & ~umask & 0777,这里的umask是“文件夹默认权限”,即“当前用户在建立文件或目录时候的属性默认值”。
知道了 mode & ~umask & 0777 这个公式,就明白为什么我们设了mode,却得不到想要的权限了。
解决办法:
先mkdir,然后chmod。
注意:
下面函数中的mode与mkdir中的类似,也存在umask的计算,因此,建议,在open成功后,再做一遍chmod操作,以确保创建的文件的访问权限是正确的。
int open(const char *pathname, int flags, mode_t mode)