#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 を指定する。
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.
この節で使用されている用語の説明については、 attributes(7)EN を参照。
| インターフェース | 属性 | 値 |
| sysconf() | Thread safety | MT-Safe env |
POSIX.1-2001, POSIX.1-2008.
ARG_MAX を使うのは難しい、なぜなら、 exec(3) の引数領域 (argument space) のうちどれくらいが ユーザーの環境変数によって使われるかは分からないからである。
いくつかの返り値はとても大きくなることがある。これらを使って メモリーの割り当てを行うのは適当ではない。
この man ページは Linux man-pages プロジェクトのリリース 5.10 の一部である。プロジェクトの説明とバグ報告に関する情報は https://www.kernel.org/doc/man-pages/ に書かれている。