pathconf() - 構成可能パス名変数の判別
標準
標準/拡張機能 | C/C++ | 依存項目 |
---|---|---|
POSIX.1a |
両方 |
形式
#define _POSIX_SOURCE
#include <unistd.h>
long pathconf(const char *pathname, int varcode);
機能説明
アプリケーションは、特定のファイルまたはディレクトリー、pathname に関連した構成変数、varcode の値を判別します。
varcode 引数は、unistd.h ヘッダー・ファイルに定義されている
次のシンボルのいずれかで、それぞれは構成変数を表しています。
- _PC_LINK_MAX
- LINK_MAX、すなわちファイルがもつことができるリンクの最大数を表します。pathname がディレクトリーの場合、pathconf() は ディレクトリー自体に対して確立できるリンクの最大数を戻します。
- _PC_MAX_CANON
- MAX_CANON、すなわち端末の規範的入力行の最大バイト数を表します。pathname は、端末の特殊文字ファイルを指している必要があります。
- _PC_MAX_INPUT
- MAX_INPUT、すなわちスペースが端末入力キューで使用可能な最大バイト数 を表します。すなわち、これは、移植可能アプリケーションが実際に入力を読み取る前に、そのアプリケーションがユーザーに入力してもらえる最大バイト数を指しています。pathname は、端末の特殊文字ファイルを指している必要があります。
- _PC_NAME_MAX
- NAME_MAX、すなわちファイル名の最大文字数 (ファイル名がストリングとして保管されている場合には、終わりに終了の NULL が含まれていない) を表します。このシンボルは、ファイル名自体、すなわちファイルのパス名の最後のコンポーネントだけを指します。pathconf() は、ファイル名の最大長を戻します。
- _PC_PATH_MAX
- PATH_MAX、すなわち完了パス名の最大文字数 (パス名がストリングとして保管 されている場合には、終わりに終了の NULL が含まれていない) を表します。pathconf() は、相対パス名の最大長を戻します。
- _PC_PIPE_BUF
- PIPE_BUF、すなわち「自動的に」パイプに書き込める最大バイト数 を表しています。これを超えるバイト数がパイプに書き込まれた場合には、パイプの他方の終わりの データを読み取るために、複数の物理書き込み操作と物理読み取り操作が行われる 場合があります。pathname が FIFO 特殊ファイルの場合、pathconf() は ファイル自体の値を戻します。pathname がディレクトリーの場合、pathconf() は ディレクトリーの下に存在する、あるいは作成できる FIFO の数を戻します。pathname が他の種類のファイルの場合には、EINVAL の errno が 戻され、無効のパス名が指定されたことを示します。
- _PC_CHOWN_RESTRICTED
- unistd.h ヘッダー・ファイルに定義されている _POSIX_CHOWN_RESTRICTED を表します。さらに、適切な特権をもつプロセスに対して chown() の使用を制限します。また、これはファイルのグループ ID をプロセスの有効グループ ID または 補足グループ ID の 1 つに変更します。pathname がディレクトリーの場合には、pathconf() は ディレクトリーのサブディレクトリーの値ではなく、そのディレクトリーの 任意の種類のファイルの値を戻します。
- _PC_NO_TRUNC
- unistd.h ヘッダー・ファイルに定義されている _POSIX_NO_TRUNC を表し、ファイル名が NAME_MAX より長い場合にはエラーを生成します。pathname がディレクトリーを示す場合は、pathconf() が 戻した値はそのディレクトリーのすべてのファイルに適用されます。
- _PC_VDISABLE
- unistd.h ヘッダー・ファイルで定義されている _POSIX_VDISABLE を表しています。このシンボルは、この文字値を使用して、端末特殊文字を使用不可にできることを 示しています (定義されている場合)。詳細は、呼び出し可能サービス tcsetattr() を参照してください。 pathname は、端末の特殊文字ファイルを指している必要があります。
- _PC_ACL
- アクセス制御機構がセキュリティー製品でサポートされている場合、1 を戻します。
- _PC_ACL_ENTRIES_MAX
- ACL をサポートするファイルまたはディレクトリーについて、ACL 内 の ACL エントリーの最大数を戻します。
戻り値
正常に実行された場合、pathconf() は varcode で要求された 変数の値を戻します。
正常に実行されなかった場合、pathconf() は -1 を戻します。特定の変数に PATH_MAX などの限界がない場合、pathconf() は -1 を 戻しますが、errno は変更されません。
pathconf() が適切な値を判別できない場合には、errno を次の値のいずれかに
設定します。
- エラー・コード
- 説明
- EACCES
- プロセスには、pathname のコンポーネントに検索許可がありません。
- EINVAL
- varcode が有効な変数コードではない、あるいは
指定された変数を指定ファイルに関連付けることができません。
- varcode が MAX_CANON、MAX_INPUT、または _POSIX_VDISABLE を指し、pathname が特殊文字ファイルを 指していない場合、pathconf() は -1 を戻し、errno を EINVAL に 設定します。
- varcode が NAME_MAX、PATH_MAX、または POSIX_NO_TRUNC を 指しており、さらに pathname がディレクトリーを指していない場合、pathconf() は要求された情報を戻します。
- varcode が PC_PIPE_BUF を指し、pathname がパイプ または FIFO を指している場合には、戻された値は参照オブジェクト自体に 適用されます。pathname がディレクトリーを示す場合、戻された値はその ディレクトリー内に存在しているか、そこで作成できる FIFO に適用されます。pathname が他のタイプのファイルを指している場合、関数は errno を EINVAL に設定します。
- ELOOP
- ループがシンボリック・リンクに存在しています。このエラーが出されるのは、POSIX_SYMLOOPS より大きいシンボリック・リンク が pathname の解決で検出された場合です。
- ENAMETOOLONG
- _POSIX_NO_TRUNC が有効ですが、pathname が PATH_MAX 文字より長いか、または pathname の一部のコンポーネントが NAME_MAX より長くなっています。
シンボリック・リンクの場合、シンボリック・リンクを置換するパス名ストリングの長さが PATH_MAX を超えています。
- ENOENT
- pathname という名前のファイルがないか、あるいは pathname 引数が空ストリングです。
- ENOTDIR
- pathname のコンポーネントは、ディレクトリーではありません。
例
CELEBP01
/* CELEBP01
This example determines the maximum number of characters in a file name.
*/
#define _POSIX_SOURCE
#include <errno.h>
#include <unistd.h>
#undef _POSIX_SOURCE
#include <stdio.h>
main() {
long result;
errno = 0;
puts("examining NAME_MAX limit for root filesystem");
if ((result = pathconf("/", _PC_NAME_MAX)) == -1)
if (errno == 0)
puts("There is no limit to NAME_MAX.");
else perror("pathconf() error");
else
printf("NAME_MAX is %ld¥n", result);
}
出力:
examining NAME_MAX limit for root file system
NAME_MAX is 255