Linux的mkdir函数

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值。

转自;Linux的mkdir函数_linux mkdir函数_Erice_s的博客-CSDN博客

猜你喜欢

转载自blog.csdn.net/fuhanghang/article/details/130152681