mkdir ()-创建目录
标准
| 标准/扩展 | C 或 C++ | 依赖关系 |
|---|---|---|
POSIX.1
XPG4 XPG4.2 单一 UNIX 规范版本 3 |
两个 |
格式
#define _POSIX_SOURCE
#include <sys/stat.h>
int mkdir(const char *pathname, mode_t mode);一般描述
创建新的空目录 pathname。 方式 中的文件许可权位由进程的文件创建掩码修改,然后用于设置要创建的目录的文件许可权位。 有关文件创建掩码的更多信息,请参阅 umask ()-设置和检索文件创建掩码。
mode 参数是使用 sys/stat.h 头文件中定义的其中一个标志创建的。 将关闭未定义的任何方式标志,并且将允许该功能继续执行。
- FLAG
- 描述
- 请求 (s_IRGRP)
- 文件组的读许可权。
- (以 IROTH 为标准)
- 文件所有者以外的用户的读许可权。
- 请求
- 文件所有者的读许可权。
- 报告 WXG
- 对文件组的读,写和搜索或执行许可权。 S_IRWXG 是 S_IRGRP , S_IWGRP 和 S_IXGRP 的按位包含 OR。
- 如果是 IRWXO ,
- 文件所有者以外的用户的读,写和搜索或执行许可权。 S_IRWXO 是 S_IROTH , S_IWOTH 和 S_IXOTH 的按位包含 OR。
- 系统 (IRWXU)
- 文件所有者的读,写和搜索或执行 ;S_IRWXU 是 S_IRUSR , S_IWUSR 和 S_IXUSR 的按位包含 OR。
- 系统标识
- 设置要执行的组标识 (GID) 的特权。 当通过 exec 函数运行此文件时,进程的有效组标识将设置为该文件的组标识。 然后,该进程具有与文件所有者相同的权限,而不是实际调用者的权限。
- 系统标识
- 设置要执行的用户标识 (UID) 的特权。 通过 exec 函数运行此文件时,进程的有效用户标识将设置为该文件的所有者。 然后,该进程具有与文件所有者相同的权限,而不是实际调用者的权限。
- ISVTX
- 指示共享文本。 保留装入为存储器中的可执行文件。
- _ IWGRP
- 文件组的写许可权。
- (_IWOTH)
- 文件所有者以外的用户的写许可权。
- IWUSR
- 文件所有者的写许可权。
- _ IXGRP
- 对文件组的搜索许可权 (针对目录) 或执行许可权 (针对文件)。
- 第 IXOTH 个
- 目录的搜索许可权或文件的执行许可权 (针对文件所有者以外的用户)。
- 请求 IXUSR
- 文件所有者的搜索许可权 (针对目录) 或执行许可权 (针对文件)。
新目录的所有者标识设置为进程的有效用户标识。 新目录的组标识设置为拥有目录的组标识。
mkdir () 设置新目录的访问,更改和修改时间。 它还设置包含新目录的目录的更改和修改时间。
如果 pathname 指定符号链接,那么 mkdir () 将失败。
返回值
如果成功, mkdir () 将返回 0。
如果不成功,mkdir() 不会创建目录,返回 -1 ,并将 errno 设为以下值之一:
- 错误代码
- 描述
- EACCES
- 进程对 pathname的某些组件没有搜索许可权,或者对要创建的目录的父目录没有写许可权。
- EEXIST
- 指定的文件引用符号链接,或者已存在具有给定 pathname的文件或目录。
- ELOOP
- 符号链接中存在循环。 如果在 pathname的解析中检测到多个 POSIX_SYMLOOP (在 limits.h 头文件中定义) 符号链接,那么会发出此错误。
- EMLINK
- 父目录的链接计数已达到 LINK_MAX (在 limits.h 头文件中定义)。
- ENAMETOOLONG
- pathname 的长度超过 PATH_MAX 个字符,或者当 _POSIX_NO_TRUNC 生效时, pathname 的某些组件的长度超过 NAME_MAX 个字符。 对于符号链接,替代符号链接的路径名字符串的长度超过 PATH_MAX。 可以使用 pathconf () 来确定 PATH_MAX 和 NAME_MAX 值。
- ENOENT
- pathname 的某些组件不存在,或者 pathname 是空字符串。
- ENOSPC
- 文件系统没有足够的空间来包含新目录,或者无法扩展父目录。
- ENOTDIR
- pathname 前缀的组件不是目录。
- EROFS
- 要创建的目录的父目录位于只读文件系统上。
示例
CELEBM16
/* CELEBM16
The following example creates a new directory.
*/
#define _POSIX_SOURCE
#include <sys/stat.h>
#include <unistd.h>
#undef _POSIX_SOURCE
#include <stdio.h>
main() {
char new_dir[]="new_dir";
if (mkdir(new_dir, S_IRWXU|S_IRGRP|S_IXGRP) != 0)
perror("mkdir() error");
else if (chdir(new_dir) != 0)
perror("first chdir() error");
else if (chdir("..") != 0)
perror("second chdir() error");
else if (rmdir(new_dir) != 0)
perror("rmdir() error");
else
puts("success!");
}