EN JA
MKDIR(2)
MKDIR(2) Linux Programmer's Manual MKDIR(2)

名前

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 のグループセマンティクス ( mount -o bsdgroups あるいは、同じ意味の mount -o grpid) に従ってマウントされている場合には、新たに作成されたディレクトリのグループ所有権は親ディレクトリのものが継承される (親ディレクトリと同じになる)。それ以外の場合は、グループ所有権はプロセスの実効グループ ID となる。
 
もし親ディレクトリに set group ID ビットがセットされていれば新しく作成されるディレクトリにも set group ID ビットがセットされる。

返り値

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

エラー

EACCES
プロセスが親ディレクトリへの書き込み許可を持たない、もしくは pathname 中のディレクトリのどれかに検索許可属性が無い ( path_resolution(7) も参照)。
EDQUOT
このファイルシステムの、ディスク・ブロックか inode のユーザクォータに達した。
EEXIST
pathname が既に存在している(ただしそれがディレクトリであるとは限らない)。 pathname がシンボリックリンクの場合も (その指定先が存在するかどうかに関らず)エラーになる。
EFAULT
pathname がアクセス可能なアドレス空間の外を指している。
ELOOP
pathname を解決するときに、解決すべきシンボリックリンクが多すぎた。
EMLINK
親ディレクトリへのリンク数が LINK_MAX を超えてしまう。
ENAMETOOLONG
pathname が長すぎる。
ENOENT
pathname の構成要素のディレクトリのいずれかが存在しないか、またはリンク先が存在しないシンボリックリンクである。
ENOMEM
カーネルに十分なメモリがない。
ENOSPC
pathname を含むデバイスに新たにディレクトリを作成する空きが無い。
ENOSPC
もしくはユーザーのディスク quota が使い切られているため、新たにディレクトリを作成することができない。
ENOTDIR
pathname のディレクトリ部分が実際にはディレクトリでない。
EPERM
pathname を含むファイルシステムがディレクトリの作成をサポートしていない。
EROFS
pathname が読み出し専用ファイルシステム上のファイルを指している。

準拠

SVr4, BSD, POSIX.1-2001.

注意

Linux では、許可ビット以外で意味を持つのは、 S_ISVTX モードビットだけである。つまり、Linux では作成されたディレクトリは実際には ( mode & ~ umask & 01777) のモードを持つことになる。 stat(2) を参照のこと。

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

関連項目

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

この文書について

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