chroot() - ルート・ディレクトリーの変更

標準

標準/拡張機能 C/C++ 依存項目

XPG4
XPG4.2

両方  

形式

#define _XOPEN_SOURCE
#include <unistd.h>

int chroot(const char *path);

機能説明

path 引数は、ディレクトリーを指名するパス名を指します。chroot() 関数は、指名したディレクトリーをルート・ ディレクトリーにします。このルート・ディレクトリーは、/ で始まるパス名 のパス検索の開始点です。プロセスの作業ディレクトリーは、chroot() の影響を 受けません。スーパーユーザーだけが chroot() を要求できます。

ルート・ディレクトリーに .. (ドット 2 つ) を 入力すると、ルート・ディレクトリーを指すように 解釈されます。そのため、.. (ドット 2 つ) は、ルート・ディレクトリーの サブツリーの外にあるファイルにアクセスするのには 使用できません。

注:

この関数は、従来からの運用上の理由から提供されます。 これは Single UNIX Specification、バージョン 2 のレガシー機能でしたが、 既に廃止され、Single UNIX Specification、バージョン 3 の一部として サポートされていません。

Single UNIX Specification、バージョン 3 のために 書かれたアプリケーションで、この関数を引き続き使う必要がある場合は、 標準システム・ヘッダーを組み込む前に、フィーチャー・テスト・マクロ _UNIX03_WITHDRAWN を 定義してください。マクロは、Single UNIX Specification、バージョン 3 に移動された すべてのインターフェースおよびシンボルを公開します。

戻り値

正常終了の場合、chroot() は、ルート・ディレクトリーを変更して 0 を 戻します。

正常に実行されなかった場合、chroot() は -1 を戻して、errno を次のいずれかの 値に設定します。
エラー・コード
説明
EACCES
path のコンポーネントに対して検索許可が拒否されました。
ELOOP
ループがシンボリック・リンクに存在しています。パス名の解決で検出されたシンボリック・リンクの数 が、POSIX_SYMLOOP (limits.h ヘッダー・ファイルで定義された値) よりも 大きい場合、このエラーが発行されました。
ENAMETOOLONG
_POSIX_NO_TRUNC が有効なときに、パス名が PATH_MAX 文字より長いか、あるいはパス名の一部のコンポーネントが NAME_MAX 文字より長くなっています。シンボリック・リンクの場合、シンボリック・リンクの代わりに使われるパス名のストリングの長さが PATH_MAX を超えています。PATH_MAX および NAME_MAX の値は、pathconf() を使用して判別されます。
ENOENT
path のコンポーネントが既存ディレクトリーに 名前を付けません。あるいは、path が空ストリングです。
ENOTDIR
path 名のコンポーネントがディレクトリーではありません。
EPERM
有効ユーザー ID に適切な特権がありません。

関連情報