说明

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 - Linux手册页

Linux程序员手册 第2部分
更新日期: 2020-06-09

遵循规范

mkdir():SVr4,BSD,POSIX.1-2001,POSIX.1-2008。

mkdirat():POSIX.1-2008。

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/

另外参见

mkdir(1),chmod(2),chown(2),mknod(2),mount(2),rmdir(2),stat(2),umask(2),unlink(2),acl(5), path_resolution(7)

名称

mkdir,mkdirat-创建目录

错误说明

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是引用目录以外的文件的文件描述符。

语法

#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()和mkdirat()成功返回零;如果发生错误,则返回-1(在这种情况下,将errno进行适当设置)。

备注

在Linux下,除了允许位以外,还支持S_ISVTX模式位。

NFS底层协议有很多不足之处。其中一些会影响mkdir()。

Glibc notes

在无法使用mkdirat()的旧内核上,glibc包装器功能会退回到mkdir()的使用。如果路径名是相对路径名,则glibc将基于/ proc / self / fd中与dirfd参数相对应的符号链接构造路径名。

版本

mkdirat()在内核2.6.16中添加到Linux;库支持已添加到版本2.4中的glibc。

日期:2019-08-20 17:59:00 来源:oir作者:oir