1. mkdir函数签名
#include <sys/types.h>
#include <sys/stat.h>
/**
* @brief 以mode方式创建一个以参数pathname命名的目录,mode定义新创建目录的权限,
* mode要以0开头,例如0766
* @param pathname: 路径
* @param mode: 权限模式
*
* @return 若目录创建成功,则返回0;否则返回-1,并将错误记录到全局变量errno中
*/
int mkdir(const char *pathname, mode_t mode);
// 关于mode_t的定义:
#ifndef __mode_t_defined
typedef __mode_t mode_t;
# define __mode_t_defined
#endif
// __mode_t的定义:
#define __mode_t __MODE_T_TYPE
#define __MODE_T_TYPE __U32_TYPE
#define __U32_TYPE unsigned int
2. mode取值含义
S_IRWXU | 00700权限,代表该文件所有者拥有读,写和执行操作的权限 |
---|---|
S_IRUSR(S_IREAD) | 00400权限,代表该文件所有者拥有可读的权限 |
S_IWUSR(S_IWRITE) | 00200权限,代表该文件所有者拥有可写的权限 |
S_IXUSR(S_IEXEC) | 00100权限,代表该文件所有者拥有执行的权限 |
S_IRWXG | 00070权限,代表该文件用户组拥有读,写和执行操作的权限 |
S_IRGRP | 00040权限,代表该文件用户组拥有可读的权限 |
S_IWGRP | 00020权限,代表该文件用户组拥有可写的权限 |
S_IXGRP | 00010权限,代表该文件用户组拥有执行的权限 |
S_IRWXO | 00007权限,代表其他用户拥有读,写和执行操作的权限 |
S_IROTH | 00004权限,代表其他用户拥有可读的权限 |
S_IWOTH | 00002权限,代表其他用户拥有可写的权限 |
S_IXOTH | 00001权限,代表其他用户拥有执行的权限 |
3. 注意事项
创建0775的目录,需要先执行umask(0) 然后再调用mkdir函数。
该函数原型: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值。