MKDIR - Linux手册页
Linux程序员手册 第2部分
更新日期: 2020-06-09
名称
mkdir,mkdirat-创建目录
语法
#include <sys/stat.h> #include <sys/types.h> int mkdir(const char *pathname, mode_t mode); #include <fcntl.h> /* Definition of AT_* constants */ #include <sys/stat.h> int mkdirat(int dirfd, const char *pathname, mode_t mode);
glibc的功能测试宏要求(请参阅feature_test_macros(7)):
mkdirat():
- Since glibc 2.10:
- _POSIX_C_SOURCE>= 200809L
- Before glibc 2.10:
- _ATFILE_SOURCE
说明
mkdir()尝试创建一个名为pathname的目录。
参数mode指定新目录的模式(请参见inode(7))。它由进程的umask常规修改:在没有默认ACL的情况下,创建的目录的模式为(mode&ti umask&0777)。是否将其他模式位用于创建的目录取决于操作系统。对于Linux,请参见下面的注释。
新创建的目录将由该进程的有效用户ID拥有。如果包含文件的目录设置了set-group-ID位,或者使用BSD组语义(挂载-o bsdgroups或同义地挂载-o grpid)挂载了文件系统,则新目录将从其目录继承组所有权。父母否则,它将归进程的有效组ID拥有。
如果父目录设置了set-group-ID位,那么新创建的目录也将置位。
mkdirat()
mkdirat()系统调用的操作与mkdir()完全相同,除了此处所述的区别。
如果在路径名中给定的路径名是相对的,则它相对于文件描述符dirfd所引用的目录进行解释(而不是相对于调用进程的当前工作目录,如相对路径名的mkdir()所做的那样) 。
如果路径名是相对的,并且dirfd是特殊值AT_FDCWD,则路径名将相对于调用进程的当前工作目录进行解释(如mkdir())。
如果路径名是绝对的,则dirfd被忽略。
有关对mkdirat()的需求的说明,请参见openat(2)。
返回值
mkdir()和mkdirat()成功返回零;如果发生错误,则返回-1(在这种情况下,将errno进行适当设置)。
错误说明
- EACCES
- 父目录不允许对该进程进行写许可,或者路径名中的目录之一不允许搜索许可。 (另请参见path_resolution(7)。)
- EDQUOT
- 用户对文件系统上的磁盘块或索引节点的配额已用尽。
- EEXIST
- 路径名已经存在(不一定是目录)。这包括路径名是符号链接(是否悬挂)的情况。
- EFAULT
- 路径名指向您可访问的地址空间之外。
- EINVAL
- 新目录路径名的最后一个组成部分("基本名")无效(例如,它包含基础文件系统不允许的字符)。
- ELOOP
- 解析路径名时遇到太多符号链接。
- EMLINK
- 到父目录的链接数将超过LINK_MAX。
- ENAMETOOLONG
- 路径名太长。
- ENOENT
- 路径名中的目录组件不存在或为悬挂的符号链接。
- ENOMEM
- 内核内存不足。
- ENOSPC
- 包含路径名的设备没有空间容纳新目录。
- ENOSPC
- 由于用户的磁盘配额已用尽,因此无法创建新目录。
- ENOTDIR
- 实际上,在路径名中用作目录的组件不是目录。
- EPERM
- 包含路径名的文件系统不支持目录的创建。
- EROFS
- 路径名是指只读文件系统上的文件。
mkdirat()可能会发生以下其他错误:
- EBADF
- dirfd不是有效的文件描述符。
- ENOTDIR
- pathname是相对的,dirfd是引用目录以外的文件的文件描述符。
版本
mkdirat()在内核2.6.16中添加到Linux;库支持已添加到版本2.4中的glibc。
遵循规范
mkdir():SVr4,BSD,POSIX.1-2001,POSIX.1-2008。
mkdirat():POSIX.1-2008。
备注
在Linux下,除了允许位以外,还支持S_ISVTX模式位。
NFS底层协议有很多不足之处。其中一些会影响mkdir()。
Glibc notes
在无法使用mkdirat()的旧内核上,glibc包装器功能会退回到mkdir()的使用。如果路径名是相对路径名,则glibc将基于/ proc / self / fd中与dirfd参数相对应的符号链接构造路径名。
另外参见
mkdir(1),chmod(2),chown(2),mknod(2),mount(2),rmdir(2),stat(2),umask(2),unlink(2),acl(5), path_resolution(7)
出版信息
这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/。