linux mkdir函数使用注意

linux的mkdir 函数原型如下:

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

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

函数说明:

   mkdir()函数以mode方式创建一个以参数pathname命名的目录,mode定义新创建目录的权限。
返回值:
 若目录创建成功,则返回0;否则返回-1,并将错误记录到全局变量errno中。
 
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权限,代表其他用户拥有执行的权限

今天使用该函数创建目录,希望创建一个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函数。这样就成功了。

原文地址:https://www.cnblogs.com/lovemdx/p/2501887.html