Provided by: manpages-ja-dev_0.5.0.0.20221215+dfsg-1_all bug

名前

       mkdir, mkdirat - ディレクトリを作成する

書式

       #include <sys/stat.h>
       #include <sys/types.h>

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

       #include <fcntl.h>           /* AT_* 定数の定義 */
       #include <sys/stat.h>

       int mkdirat(int dirfd, const char *pathname, mode_t mode);

   glibc 向けの機能検査マクロの要件 (feature_test_macros(7)  参照):

       mkdirat():
           glibc 2.10 以降:
               _POSIX_C_SOURCE >= 200809L
           glibc 2.10 より前:
               _ATFILE_SOURCE

説明

       mkdir()  は pathname で示される名前のディレクトリを作成しようとする。

       The argument mode specifies the mode for the new directory (see inode(7)).  It is modified
       by the process's umask in the usual way: in the absence of a default ACL, the mode of  the
       created  directory is (mode & ~umask & 0777).  Whether other mode bits are honored for the
       created directory depends on the operating system.  For Linux, see NOTES below.

       新しく作成されたディレクトリの所有者はプロセスの実効ユーザー ID に設定される。  新たに作成
       されたディレクトリが含まれる親ディレクトリに set group ID ビットがセットされていたり、ファ
       イルシステムが BSD の  グループセマンティクス  (mount  -o  bsdgroups  あるいは、同じ意味の
       mount -o grpid)  に従ってマウントされている場合には、 新たに作成されたディレクトリのグルー
       プ所有権は親ディレクトリの ものが継承される (親ディレクトリと同じになる)。  それ以外の場合
       は、グループ所有権はプロセスの実効グループ ID となる。

       もし親ディレクトリに  set group ID ビットがセットされていれば新しく作成される ディレクトリ
       にも set group ID ビットがセットされる。

   mkdirat()
       mkdirat() システムコールは mkdir() と全く同様に動作するが、以下で説明する点が異なる。

       pathname で指定されたパス名が相対パスの場合、このパス名はファイルディスクリプター dirfd が
       参照するディレクトリに対する相対パスと解釈される  (mkdir()  に相対パス名を渡した場合のよう
       に、呼び出したプロセスのカレントワーキングディレクトリに対する相対パスではない)。

       pathname で指定されたパス名が相対パスで、 dirfd が特別な値 AT_FDCWD の場合、 (mkdir() と同
       様に)  pathname は呼び出したプロセスのカレントワーキングディレクトリに対する相対パスと解釈
       される。

       pathname で指定されたパス名が絶対パスの場合、 dirfd は無視される。

       mkdirat() の必要性についての説明については openat(2) を参照。

返り値

       mkdir() と mkdirat() は成功した場合 0 を、失敗した場合 -1 を返す (また、 errno  がエラーの
       内容にしたがって適切に設定される)。

エラー

       EACCES プロセスが親ディレクトリへの書き込み許可を持たない、もしくは  pathname 中のディレク
              トリのどれかに検索許可属性が無い (path_resolution(7)  も参照)。

       EDQUOT ディスクブロックか inode がそのファイルシステムのユーザークォータに達していた。

       EEXIST pathname が既に存在している(ただしそれがディレクトリであるとは限らない)。  pathname
              がシンボリックリンクの場合も (その指定先が存在するかどうかに関らず)エラーになる。

       EFAULT pathname がアクセス可能なアドレス空間の外を指している。

       EINVAL The  final component ("basename") of the new directory's pathname is invalid (e.g.,
              it contains characters not permitted by the underlying filesystem).

       ELOOP  pathname を解決するときに、解決すべきシンボリックリンクが多すぎた。

       EMLINK 親ディレクトリへのリンク数が LINK_MAX を超えてしまう。

       ENAMETOOLONG
              pathname が長すぎる。

       ENOENT pathname の構成要素のディレクトリのいずれかが存在しないか、  またはリンク先が存在し
              ないシンボリックリンクである。

       ENOMEM カーネルに十分なメモリーがない。

       ENOSPC pathname を含むデバイスに新たにディレクトリを作成する空きが無い。

       ENOSPC もしくはユーザーのディスク  quota が使い切られているため、 新たにディレクトリを作成
              することができない。

       ENOTDIR
              pathname のディレクトリ部分が実際にはディレクトリでない。

       EPERM  pathname を含むファイルシステムがディレクトリの作成をサポートしていない。

       EROFS  pathname が読み出し専用ファイルシステム上のファイルを指している。

       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.

注意

       Under Linux, apart from the permission bits, the S_ISVTX mode bit is also honored.

       NFS を実現しているプロトコルには多くの不備が存在し、 それら中には mkdir()   に影響を与える
       ものもある。

   glibc での注意
       mkdirat() が利用できない古いカーネルでは、 glibc ラッパー関数は mkdir() を使用するモードに
       フォールバックする。   pathname   が相対パスの場合、   glibc   は   dirfd   引数に対応する
       /proc/self/fd のシンボリックリンクに基づいてパス名を構成する。

関連項目

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

この文書について

       この man ページは Linux man-pages プロジェクトのリリース 5.10 の一部である。プロジェクトの
       説明とバグ報告に関する情報は https://www.kernel.org/doc/man-pages/ に書かれている。