mkdir - システムコールの説明 - Linux コマンド集 一覧表
名前
mkdir - ディレクトリを作成する
書式
#include <sys/stat.h>#include <sys/types.h>
int mkdir(const char *pathname, mode_t mode);
説明
mkdir
()は
pathname
で示される名前のディレクトリを作成する。
mode
引き数は、作成されたディレクトリの許可属性を決定するのに使われる。
この値に、通常通りプロセスの
umask
による修正が加えられる。
したがって、作成されたディレクトリの許可属性は
(
mode
& ~
umask
& 0777)となる。
作成されたディレクトリのその他のモードビットはオペレーティングシステムに
依存する。Linux の場合は、以下の通りである。
新しく作成されたディレクトリの所有者はプロセスの実効ユーザID に設定される。
新たに作成されたディレクトリが含まれる親ディレクトリに
set group ID ビットがセットされていたり、ファイルシステムが BSD の
グループセマンティクスに従ってマウントされている場合には、
新たに作成されたディレクトリのグループ所有権は親ディレクトリの
ものが継承される (親ディレクトリと同じになる)。
それ以外の場合は、グループ所有権はプロセスの実効グループID となる。
もし親ディレクトリに set group ID ビットがセットされていれば新しく作成される
ディレクトリにも set group ID ビットがセットされる。
返り値
mkdir ()は成功した場合 0 を、失敗した場合 -1 を返す (また、 errno がエラーの内容にしたがって適切に設定される)。
エラー
- EACCES
- プロセスが親ディレクトリへの書き込み許可を持たない。もしくは pathname 中のディレクトリのどれかに検索許可属性が無い ( path_resolution (2)も参照)。
- EEXIST
- pathname が既に存在している(ただしそれがディレクトリであるとは限らない)。 pathname がシンボリックリンクの場合も (その指定先が存在するかどうかに関らず)エラーになる。
- EFAULT
- pathname がそのプロセスのアクセス可能なアドレス空間の外を指している。
- ELOOP
- パス名 pathname を解決するときに、解決すべきシンボリックリンクが多すぎた。
- ENAMETOOLONG
- pathname が長すぎる。
- ENOENT
- pathname の構成要素のディレクトリのいずれかが存在しないか、 またはリンク先が存在しないシンボリックリンクである。
- ENOMEM
- カーネルに、利用できるメモリが不足している。
- ENOSPC
- pathname を含むデバイスに新たにディレクトリを作成する空きが無い。 もしくはユーザーのディスク quota が使い切られているため、 新たにディレクトリを作成することができない。
- ENOTDIR
- pathname 中のディレクトリ部分が実際にはディレクトリでない。
- EPERM
- pathname を含むファイルシステムがディレクトリの作成をサポートしていない。
- EROFS
- pathname が読み出し専用ファイルシステム上のファイルを指している。
準拠
SVr4, BSD, POSIX.1-2001.
注意
Linux では、許可ビット以外で意味を持つのは、S_ISVTX モードビットだけである。 つまり、Linux では作成されたディレクトリは実際には ( mode & ~ umask & 01777)のモードを持つことになる。 stat (2) を参照のこと。
NFS を実現しているプロトコルには多くの不備が存在し、 それら中には mkdir ()に影響を与えるものもある。