.\" This manpage is Copyright (C) 1992 Drew Eckhardt;
.\" and Copyright (C) 1993 Michael Haardt
-.\" and Copyright (C) 1993,1994 Ian Jackson.
+.\" and Copyright (C) 1993,1994 Ian Jackson
+.\" and Copyright (C) 2006, 2014 Michael Kerrisk
.\"
.\" %%%LICENSE_START(GPL_NOVERSION_ONELINE)
.\" You may distribute it under the terms of the GNU General
.\" Updated 2013-05-01, Akihiro MOTOKI <amotoki@gmail.com>
.\" Updated 2013-05-06, Akihiro MOTOKI <amotoki@gmail.com>
.\"
-.TH MKDIR 2 2013\-01\-27 Linux "Linux Programmer's Manual"
+.TH MKDIR 2 2014\-08\-19 Linux "Linux Programmer's Manual"
.SH 名前
-mkdir \- ディレクトリを作成する
+mkdir, mkdirat \- ディレクトリを作成する
.SH 書式
.nf
.\" .B #include <unistd.h>
\fB#include <sys/types.h>\fP
.sp
\fBint mkdir(const char *\fP\fIpathname\fP\fB, mode_t \fP\fImode\fP\fB);\fP
+.sp
+\fB#include <fcntl.h> \fP/* AT_* 定数の定義 */
+\fB#include <sys/stat.h>\fP
+.sp
+\fBint mkdirat(int \fP\fIdirfd\fP\fB, const char *\fP\fIpathname\fP\fB, mode_t \fP\fImode\fP\fB);\fP
+.fi
+.sp
+.in -4n
+glibc 向けの機能検査マクロの要件 (\fBfeature_test_macros\fP(7) 参照):
+.in
+.sp
+\fBmkdirat\fP():
+.PD 0
+.ad l
+.RS 4
+.TP 4
+glibc 2.10 以降:
+_XOPEN_SOURCE\ >=\ 700 || _POSIX_C_SOURCE\ >=\ 200809L
+.TP
+glibc 2.10 より前:
+_ATFILE_SOURCE
+.RE
+.ad
+.PD
.fi
.SH 説明
\fBmkdir\fP() は \fIpathname\fP で示される名前のディレクトリを作成しようとする。
による修正が加えられる。 したがって、作成されたディレクトリの許可属性は (\fImode\fP & ~\fIumask\fP & 0777) となる。
作成されたディレクトリのその他のモードビットはオペレーティングシステムに 依存する。Linux の場合は、以下の通りである。
-The newly created directory will be owned by the effective user ID of the
-process. If the directory containing the file has the set\-group\-ID bit set,
-or if the filesystem is mounted with BSD group semantics (\fImount \-o
-bsdgroups\fP or, synonymously \fImount \-o grpid\fP), the new directory will
-inherit the group ownership from its parent; otherwise it will be owned by
-the effective group ID of the process.
+新しく作成されたディレクトリの所有者はプロセスの実効ユーザー ID に設定される。 新たに作成されたディレクトリが含まれる親ディレクトリに set
+group ID ビットがセットされていたり、ファイルシステムが BSD の グループセマンティクス (\fImount \-o bsdgroups\fP
+あるいは、同じ意味の \fImount \-o grpid\fP) に従ってマウントされている場合には、
+新たに作成されたディレクトリのグループ所有権は親ディレクトリの ものが継承される (親ディレクトリと同じになる)。
+それ以外の場合は、グループ所有権はプロセスの実効グループ ID となる。
+.\"
+.\"
もし親ディレクトリに set group ID ビットがセットされていれば新しく作成される ディレクトリにも set group ID
ビットがセットされる。
+.SS mkdirat()
+\fBmkdirat\fP() システムコールは \fBmkdir\fP() と全く同様に動作するが、以下で説明する点が異なる。
+
+\fIpathname\fP で指定されたパス名が相対パスの場合、このパス名はファイルディスクリプター \fIdirfd\fP
+が参照するディレクトリに対する相対パスと解釈される (\fBmkdir\fP()
+に相対パス名を渡した場合のように、呼び出したプロセスのカレントワーキングディレクトリに対する相対パスではない)。
+
+\fIpathname\fP で指定されたパス名が相対パスで、 \fIdirfd\fP が特別な値 \fBAT_FDCWD\fP の場合、 (\fBmkdir\fP()
+と同様に) \fIpathname\fP は呼び出したプロセスのカレントワーキングディレクトリに対する相対パスと解釈される。
+
+\fIpathname\fP で指定されたパス名が絶対パスの場合、 \fIdirfd\fP は無視される。
+.PP
+\fBmkdirat\fP() の必要性についての説明については \fBopenat\fP(2) を参照。
.SH 返り値
-\fBmkdir\fP() は成功した場合 0 を、失敗した場合 \-1 を返す (また、 \fIerrno\fP がエラーの内容にしたがって適切に設定される)。
+\fBmkdir\fP() と \fBmkdirat\fP() は成功した場合 0 を、失敗した場合 \-1 を返す (また、 \fIerrno\fP
+がエラーの内容にしたがって適切に設定される)。
.SH エラー
.TP
\fBEACCES\fP
(\fBpath_resolution\fP(7) も参照)。
.TP
\fBEDQUOT\fP
-The user's quota of disk blocks or inodes on the filesystem has been
-exhausted.
+ディスクブロックか inode がそのファイルシステムのユーザークォータに達していた。
.TP
\fBEEXIST\fP
\fIpathname\fP が既に存在している(ただしそれがディレクトリであるとは限らない)。 \fIpathname\fP がシンボリックリンクの場合も
\fIpathname\fP の構成要素のディレクトリのいずれかが存在しないか、 またはリンク先が存在しないシンボリックリンクである。
.TP
\fBENOMEM\fP
-カーネルに十分なメモリがない。
+ã\82«ã\83¼ã\83\8dã\83«ã\81«å\8d\81å\88\86ã\81ªã\83¡ã\83¢ã\83ªã\83¼ã\81\8cã\81ªã\81\84ã\80\82
.TP
\fBENOSPC\fP
\fIpathname\fP を含むデバイスに新たにディレクトリを作成する空きが無い。
\fIpathname\fP のディレクトリ部分が実際にはディレクトリでない。
.TP
\fBEPERM\fP
-The filesystem containing \fIpathname\fP does not support the creation of
-directories.
+\fIpathname\fP を含むファイルシステムがディレクトリの作成をサポートしていない。
.TP
\fBEROFS\fP
-\fIpathname\fP refers to a file on a read\-only filesystem.
+\fIpathname\fP が読み出し専用ファイルシステム上のファイルを指している。
+.PP
+\fBmkdirat\fP() では以下のエラーも発生する。
+.TP
+\fBEBADF\fP
+\fIdirfd\fP が適切なファイルディスクリプターでない。
+.TP
+\fBENOTDIR\fP
+\fIpathname\fP が相対パスで、 \fIdirfd\fP がディレクトリ以外のファイルを参照しているファイルディスクリプターである。
+.SH バージョン
+\fBmkdirat\fP() はカーネル 2.6.16 で Linux に追加された。 ライブラリによるサポートはバージョン 2.4 で glibc
+に追加された。
.SH 準拠
.\" SVr4 documents additional EIO, EMULTIHOP
-SVr4, BSD, POSIX.1\-2001.
+\fBmkdir\fP(): SVr4, BSD, POSIX.1\-2001, POSIX.1\-2008.
+
+\fBmkdirat\fP(): POSIX.1\-2008.
.SH 注意
Linux では、許可ビット以外で意味を持つのは、 \fBS_ISVTX\fP モードビットだけである。 つまり、Linux
では作成されたディレクトリは実際には (\fImode\fP & ~\fIumask\fP & 01777) のモードを持つことになる。 \fBstat\fP(2)
を参照のこと。
.PP
NFS を実現しているプロトコルには多くの不備が存在し、 それら中には \fBmkdir\fP() に影響を与えるものもある。
+.SS "glibc での注意"
+\fBmkdirat\fP() が利用できない古いカーネルでは、 glibc ラッパー関数は \fBmkdir\fP() を使用するモードにフォールバックする。
+\fIpathname\fP が相対パスの場合、 glibc は \fIdirfd\fP 引き数に対応する \fI/proc/self/fd\fP
+のシンボリックリンクに基づいてパス名を構成する。
.SH 関連項目
-\fBmkdir\fP(1), \fBchmod\fP(2), \fBchown\fP(2), \fBmkdirat\fP(2), \fBmknod\fP(2),
-\fBmount\fP(2), \fBrmdir\fP(2), \fBstat\fP(2), \fBumask\fP(2), \fBunlink\fP(2),
-\fBpath_resolution\fP(7)
+\fBmkdir\fP(1), \fBchmod\fP(2), \fBchown\fP(2), \fBmknod\fP(2), \fBmount\fP(2),
+\fBrmdir\fP(2), \fBstat\fP(2), \fBumask\fP(2), \fBunlink\fP(2), \fBpath_resolution\fP(7)
.SH この文書について
-この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.54 の一部
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.79 の一部
である。プロジェクトの説明とバグ報告に関する情報は
http://www.kernel.org/doc/man\-pages/ に書かれている。