標準
標準/拡張機能 |
C/C++ |
依存項目 |
POSIX.1
XPG4
XPG4.2
Single UNIX Specification、バージョン 3
|
両方 |
|
形式
#define _POSIX_SOURCE
#include <sys/stat.h>
int mkdir(const char *pathname, mode_t mode);
機能説明
新規の空ディレクトリーの pathname を作成します。mode のファイル許可ビットは、プロセスの
ファイル作成マスクで変更してから、作成中の
ディレクトリーのファイル許可ビットを設定するのに
使用します。ファイル作成マスクについての詳細は、umask() - ファイル作成マスクの設定と検索を
参照してください。
mode 引数は、sys/stat.h ヘッダー・ファイル内で定義されるフラグの 1 つで作成されます。定義されていないモード・フラグはいずれもオフになり、関数は続行することを許可されます。
- フラグ
- 説明
- S_IRGRP
- ファイルのグループ用の読み取り許可。
- S_IROTH
- ファイル所有者以外のユーザー用の読み取り許可。
- S_IRUSR
- ファイル所有者用の読み取り許可。
- S_IRWXG
- ファイルのグループ用の読み取り、書き込み、検索、または実行の許可。S_IRWXG は、S_IRGRP、S_IWGRP、および S_IXGRP のビット単位の包含 OR です。
- S_IRWXO
- ファイル所有者以外のユーザー用の
読み取り、書き込み、検索、または実行の許可。S_IRWXO は、S_IROTH、S_IWOTH、および S_IXOTH
のビット単位の包含 OR です。
- S_IRWXU
- ファイル所有者用に読み取り、書き込み、および探索または実行を行います。S_IRWXU は、S_IRUSR、S_IWUSR、および S_IXUSR のビット単位の包含 OR です。
- S_ISGID
- 実行用のグループ ID (GID) を設定する特権。このファイルが exec 関数により実行される場合は、プロセスの有効グループ ID がファイルのグループ ID に
設定されます。そのあとでプロセスは、実際の呼び出し元の権限ではなく、ファイル所有者と同じ権限を持ちます。
- S_ISUID
- 実行用のユーザー ID (UID) を設定する特権。このファイルが exec 関数により実行される場合は、プロセスの有効ユーザー ID がファイルの所有者に
設定されます。そのあとでプロセスは、実際の呼び出し元の権限ではなく、ファイル所有者と同じ権限を持ちます。
- S_ISVTX
- 共用テキストを指示します。実行可能ファイルとしてストレージにロードしたままにしてください。
- S_IWGRP
- ファイルのグループ用の書き込み許可。
- S_IWOTH
- ファイル所有者以外のユーザー用の書き込み許可。
- S_IWUSR
- ファイル所有者用の書き込み許可。
- S_IXGRP
- ファイルのグループ用の検索許可 (ディレクトリーの場合) または
実行許可 (ファイルの場合)。
- S_IXOTH
- ファイル所有者以外のユーザー用の検索許可 (ディレクトリーの場合) または実行許可 (ファイルの場合)。
- S_IXUSR
- ファイル所有者用の検索許可 (ディレクトリーの場合) または
実行許可 (ファイルの場合)。
新規ディレクトリーの所有者 ID は、プロセスの
有効ユーザー ID に設定されます。新規ディレクトリーのグループ ID は、所有ディレクトリー
のグループ ID に設定されます。
mkdir() は、新規ディレクトリー用のアクセス、変更、および修正の回数を設定します。また、新規ディレクトリーが入っているディレクトリー用の
変更と修正の回数も設定します。
pathname にシンボリック・リンクの名前が設定されている場合、mkdir() は失敗します。
戻り値
正常に実行された場合、mkdir() は 0 を戻します。
正常終了しなかった場合、mkdir() は、ディレクトリーを作成しないで -1 を戻し、errno を以下の値のいずれかに設定します。
- エラー・コード
- 説明
- EACCES
- プロセスには pathname の一部コンポーネントに関する
検索許可がありませんでした。あるいは、作成するディレクトリーの
親ディレクトリーに関する書き込み許可がありませんでした。
- EEXIST
- 名前の付けられたファイルがシンボリック・リンクを示しているか、指定された pathname のファイルまたは
ディレクトリーが既に存在します。
- ELOOP
- ループがシンボリック・リンクに存在しています。pathname の解決
で POSIX_SYMLOOP (limits.h ヘッダー・ファイルで
定義) を超えるシンボリック・リンクが検出されると、このエラーが
発行されます。
- EMLINK
- 親ディレクトリーのリンク数
が LINK_MAX (limits.h ヘッダー・ファイルで
定義) に達しています。
- ENAMETOOLONG
- _POSIX_NO_TRUNC が有効ですが、pathname が PATH_MAX 文字より長いか、または pathname の一部のコンポーネントが NAME_MAX 文字より長くなっています。シンボリック・リンクの場合、シンボリック・リンクの代わりに使われる
パス名のストリングの長さが PATH_MAX を超えています。PATH_MAX 値と NAME_MAX 値は
、pathconf() を使用して確認できます。
- ENOENT
- pathname の一部コンポーネントが存在しません。あるいは、pathname が空ストリングです。
- ENOSPC
- ファイル・システムに新規ディレクトリーを含むための十分なスペースがありません。あるいは、親ディレクトリーを拡張できません。
- ENOTDIR
- pathname の接頭部のコンポーネントが
ディレクトリーではありません。
- EROFS
- 作成されるディレクトリーの親ディレクトリーが読み取り専用ファイル・システム上にあります。
例
CELEBM16 ⁄* CELEBM16
The following example creates a new directory.
*⁄
#define _POSIX_SOURCE
#include <sys⁄stat.h>
#include <unistd.h>
#undef _POSIX_SOURCE
#include <stdio.h>
main() {
char new_dir[]="new_dir";
if (mkdir(new_dir, S_IRWXU|S_IRGRP|S_IXGRP) != 0)
perror("mkdir() error");
else if (chdir(new_dir) != 0)
perror("first chdir() error");
else if (chdir("..") != 0)
perror("second chdir() error");
else if (rmdir(new_dir) != 0)
perror("rmdir() error");
else
puts("success!");
}