linux mkdir函数使用注意

 

linux的mkdir 函数原型如下:

int mkdir(const char *pathname, mode_t mode);

今天使用linux的mkdir创建目录。

函数说明:

   mkdir()函数以mode方式创建一个以参数pathname命名的目录,mode定义新创建目录的权限。
返回值:
若目录创建成功,则返回0;否则返回-1,并将错误记录到全局变量errno中。
 
mode方式: 
S_IRWXU00700权限,代表该文件所有者拥有读,写和执行操作的权限
S_IRUSR(S_IREAD)00400权限,代表该文件所有者拥有可读的权限
S_IWUSR(S_IWRITE)00200权限,代表该文件所有者拥有可写的权限
S_IXUSR(S_IEXEC)00100权限,代表该文件所有者拥有执行的权限
S_IRWXG00070权限,代表该文件用户组拥有读,写和执行操作的权限
S_IRGRP00040权限,代表该文件用户组拥有可读的权限
S_IWGRP00020权限,代表该文件用户组拥有可写的权限
S_IXGRP00010权限,代表该文件用户组拥有执行的权限
S_IRWXO00007权限,代表其他用户拥有读,写和执行操作的权限
S_IROTH00004权限,代表其他用户拥有可读的权限
S_IWOTH00002权限,代表其他用户拥有可写的权限
S_IXOTH00001权限,代表其他用户拥有执行的权限

 

今天使用该函数创建目录,希望创建一个775的权限的目录。但是创建一直失败。

后来查阅资料后发现

需要先调用umask函数。

该函数原型:mode_t umask(mode_t mask);

函数说明
umask()会将系统umask值设成参数mask&0777后的值,然后将先前的umask值返回。在使用open()建立新文件时,该参数mode并非真正建立文件的权限,而是(mode&~umask)的权限值。例如,在建立文件时指定文件权限为0666,通常umask值默认为022,则该文件的真正权限则为0666&~022=0644,也就是rw-r--r--返回值此调用不会有错误值返回。返回值为原先系统的umask值。

因此,创建775的目录,需要先执行umask(0) 然后再调用mkdir函数。这样就成功了

GitHub 加速计划 / li / linux-dash
10.39 K
1.2 K
下载
A beautiful web dashboard for Linux
最近提交(Master分支:2 个月前 )
186a802e added ecosystem file for PM2 4 年前
5def40a3 Add host customization support for the NodeJS version 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐