sysconf -
動作中に設定情報を取得する
#include <unistd.h>
long sysconf(int name);
POSIX
では、アプリケーションがコンパイル時や実行時に、
特定のオプションがサポートされているかや、
設定可能な特定の定数や制限
(limits)
がどんな値かをテストすることができる。
コンパイル時に行うには、
<unistd.h> と
<limits.h>
の両方もしくは一方をインクルードし、
特定のマクロの値を確認する。
実行時には、ここで説明する関数
sysconf()
を使って数値を問い合わせることができる。
ファイルが存在するファイルシステムに依存する数値は、
fpathconf(3) と
pathconf(3)
を使って確認できる。
文字列の値は
confstr(3)
を使って確認できる。
これらの関数で取得される値は設定可能なシステム定数である。
これらはプロセスの生存期間の間は変化しない。
オプションを確認できるように、たいていは
<unistd.h> で定数
_POSIX_FOO
が定義されている。
定義されていないときは、実行時に問い合わせを行う必要がある。
その値が -1
に定義されているときは、そのオプションはサポートされていない。
0
に定義されているときは、関連する関数やヘッダーファイルが存在するが、
どの程度サポートされているかは実行時に確認しなければならない。
-1 でも 0
でもない値に定義されているときは、そのオプションがサポート
されている。通常は、そのオプションについて記載した
POSIX の改訂年月
を示す値になっている
(例えば 200112L)。 glibc では 1
が設定されていると、そのオプションはサポートされているが、
POSIX
の改訂版がまだ発行されていないことを示す。
sysconf() の引数には
_SC_FOO
を指定する。
オプションのリストについては
posixoptions(7)
を参照のこと。
変数や制限を確認できるように、たいていは、
<limits.h> で定数
_FOO が、
<unistd.h> で
_POSIX_FOO
が定義されている。
制限が規定されていない場合は定数は定義されない。
定数が定義されているときには、その定数は保証できる値であり、
実際にはもっと大きな値がサポートされていることもある。
アプリケーションがシステム毎に変化する値を利用したい場合には、
sysconf()
を呼び出すことで実現できる。
sysconf() の引数には
_SC_FOO
を指定する。
変数名、その値を取得するのに使われる
sysconf()
のパラメーター名、簡単な説明を以下に示す。
まず POSIX.1
互換の変数を示す。
-
ARG_MAX - _SC_ARG_MAX
-
exec(3)
関数群の引数の最大長。
_POSIX_ARG_MAX (4096)
未満であってはならない。
-
CHILD_MAX - _SC_CHILD_MAX
- ユーザーID
あたりの同時に存在できるプロセスの最大数。
_POSIX_CHILD_MAX (25)
未満であってはならない。
-
HOST_NAME_MAX - _SC_HOST_NAME_MAX
-
gethostname(2)
で返されるホスト名の最大長。末尾のヌルバイトは長さに含まれない。
_POSIX_HOST_NAME_MAX (255)
未満であってはならない。
-
LOGIN_NAME_MAX - _SC_LOGIN_NAME_MAX
- ログイン名の長さの最大値。末尾のヌルバイトも長さに含まれる。
_POSIX_LOGIN_NAME_MAX (9)
未満であってはならない。
-
NGROUPS_MAX - _SC_NGROUPS_MAX
- 補助グループ ID
の最大数。
- clock ticks - _SC_CLK_TCK
- 1秒あたりのクロックティック数。
対応する変数は廃止された。この変数は当然ながら
CLK_TCK
と呼ばれていた。
(注意: マクロ CLOCKS_PER_SEC
からは情報は得られない:
この値は 1000000
でなければならない)
-
OPEN_MAX - _SC_OPEN_MAX
- 一つのプロセスが同時にオープンできるファイル数の上限。
_POSIX_OPEN_MAX (20)
未満であってはならない。
-
PAGESIZE - _SC_PAGESIZE
- バイト単位でのページサイズ。
1
より小さくなってはならない。
-
PAGE_SIZE - _SC_PAGE_SIZE
- A synonym for PAGESIZE/_SC_PAGESIZE. (Both
PAGESIZE and PAGE_SIZE are specified in POSIX.)
-
RE_DUP_MAX - _SC_RE_DUP_MAX
-
regexec(3) と regcomp(3)
で許容されている BRE
(Basic Regular Expression;
基本正規表現)
の繰り返し出現回数の最大値。
_POSIX2_RE_DUP_MAX (255)
未満であってはならない。
-
STREAM_MAX - _SC_STREAM_MAX
- 一つのプロセスが同時にオープンできるストリーム数の上限。
定義されていた場合には、この値は標準
C マクロの FOPEN_MAX
と同じである。
_POSIX_STREAM_MAX (8)
未満であってはならない。
-
SYMLOOP_MAX - _SC_SYMLOOP_MAX
- パス名の解決時に現れてもよいシンボリックリンクの最大数。
この数を超えると、パス名解決時に
ELOOP が返される。
_POSIX_SYMLOOP_MAX (8)
未満であってはならない。
-
TTY_NAME_MAX - _SC_TTY_NAME_MAX
- 端末デバイス名の最大長。長さには末尾のヌルバイトも含まれる。
_POSIX_TTY_NAME_MAX (9)
未満であってはならない。
-
TZNAME_MAX - _SC_TZNAME_MAX
- タイムゾーン名として使えるバイト数の最大値。
_POSIX_TZNAME_MAX (6)
未満であってはならない。
-
_POSIX_VERSION - _SC_VERSION
- POSIX.1
標準が承認された年月。
YYYYMML
という書式である。
199009L
という値は、1990年 9月
改訂であることを示す。
次に、POSIX.2 の値を示す。
これらは各ユーティリティに対する制限を指定する。
-
BC_BASE_MAX - _SC_BC_BASE_MAX
-
bc(1)
ユーティリティで許容される
obase の最大値。
-
BC_DIM_MAX - _SC_BC_DIM_MAX
-
bc(1)
で許容される一つの配列中の要素数の最大値。
-
BC_SCALE_MAX - _SC_BC_SCALE_MAX
-
bc(1) で許される
scale の最大値。
-
BC_STRING_MAX - _SC_BC_STRING_MAX
-
bc(1)
で許容される文字列の最大長。
-
COLL_WEIGHTS_MAX - _SC_COLL_WEIGHTS_MAX
- ロケール定義ファイル中の
LC_COLLATE order
キーワードのエントリーに割り当て可能な重みの最大値。
-
EXPR_NEST_MAX - _SC_EXPR_NEST_MAX
-
expr(1)
において、括弧で入れ子にできる式の最大数。
-
LINE_MAX - _SC_LINE_MAX
- ユーティリティの入力行の最大長。標準入力だけでなく、ファイルからの入力にも
適用される。長さには行の末尾の改行文字も含まれる。
-
RE_DUP_MAX - _SC_RE_DUP_MAX
- 正規表現で区間表記
(interval notation) \{m,n\}
が使用されたときに許容される繰り返し出現回数の最大値。
-
POSIX2_VERSION - _SC_2_VERSION
- POSIX.2
標準のバージョン。YYYYMML
という書式で表記される。
-
POSIX2_C_DEV - _SC_2_C_DEV
- POSIX.2 の C
言語開発機能がサポートされているかを示す。
-
POSIX2_FORT_DEV - _SC_2_FORT_DEV
- POSIX.2 の FORTRAN
開発ユーティリティがサポートされているかを示す。
-
POSIX2_FORT_RUN - _SC_2_FORT_RUN
- POSIX.2 の FORTRAN
ランタイムユーティリティがサポートされているかを示す。
-
_POSIX2_LOCALEDEF - _SC_2_LOCALEDEF
-
localedef(1)
を使った、POSIX.2
のロケールの作成をサポートしているかを示す。
-
POSIX2_SW_DEV - _SC_2_SW_DEV
- POSIX.2
ソフトウェア開発ユーティリティオプションがサポートされているかを示す。
以下の値も存在するが、標準には含まれていない。
-
- _SC_PHYS_PAGES
- 物理メモリーのページ数。
この値と _SC_PAGESIZE
値の積は桁溢れする可能性があるので注意すること。
-
- _SC_AVPHYS_PAGES
- 現在利用可能な物理メモリーのページ数。
-
- _SC_NPROCESSORS_CONF
- 設定されたプロセッサ数。
get_nprocs_conf(3) も参照。
-
- _SC_NPROCESSORS_ONLN
- 現在オンラインの
(利用可能な)
プロセッサ数。
get_nprocs_conf(3) も参照。
The return value of
sysconf() is one of the following:
- *
- On error, -1 is returned and errno is set to
indicate the cause of the error (for example, EINVAL, indicating
that name is invalid).
- *
- If name corresponds to a maximum or minimum limit,
and that limit is indeterminate, -1 is returned and errno is not
changed. (To distinguish an indeterminate limit from an error, set
errno to zero before the call, and then check whether errno
is nonzero when -1 is returned.)
- *
- If name corresponds to an option, a positive value
is returned if the option is supported, and -1 is returned if the option
is not supported.
- *
- Otherwise, the current value of the option or limit is
returned. This value will not be more restrictive than the corresponding
value that was described to the application in <unistd.h> or
<limits.h> when the application was compiled.
- EINVAL
-
name
が無効である。
この節で使用されている用語の説明については、
attributes(7) を参照。
インターフェース |
属性 |
値 |
sysconf() |
Thread safety |
MT-Safe env |
POSIX.1-2001, POSIX.1-2008.
ARG_MAX
を使うのは難しい、なぜなら、
exec(3) の引数領域 (argument space)
のうちどれくらいが
ユーザーの環境変数によって使われるかは分からないからである。
いくつかの返り値はとても大きくなることがある。これらを使って
メモリーの割り当てを行うのは適当ではない。
bc(1),
expr(1),
getconf(1),
locale(1),
confstr(3),
fpathconf(3),
pathconf(3),
posixoptions(7)
この man ページは Linux
man-pages
プロジェクトのリリース
5.10
の一部である。プロジェクトの説明とバグ報告に関する情報は
https://www.kernel.org/doc/man-pages/
に書かれている。