pathconf() - 構成可能パス名変数の判別

標準

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

POSIX.1a
XPG4
XPG4.2
Single UNIX Specification、バージョン 3

両方  

形式

#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