SYSCTL(3) FreeBSD ライブラリ関数マニュアル SYSCTL(3)
名称
sysctl, sysctlbyname, sysctlnametomib − システム情報を取得または設定 |
ライブラリ
標準 C ライブラリ (libc, −lc) |
書式
#include <sys/types.h> int |
sysctl(int *name, u_int namelen, void *oldp, size_t *oldlenp, void *newp, size_t newlen); int |
sysctlbyname(const char *name, void *oldp, size_t *oldlenp, void *newp, size_t newlen); int |
sysctlnametomib(const char *name, int *mibp, size_t *sizep); |
解説 |
sysctl() 関数はシステム情報を取り出し、該当する特権のあるプロセスがシステ ム情報を設定できるようにします。 sysctl() で利用できる情報は、整数、スト リング、およびテーブルで構成されます。情報は、 sysctl(8) ユーティリティを 使用してコマンドインタフェースから取り出しおよび設定できます。 以降で明確に記載した場合を除いて、 sysctl() は、要求されたデータの一貫し たスナップショットを返します。一貫性を保つために、メモリへの宛先バッファ がロックされるので、データはブロックなしにコピーできます。 sysctl() の呼 び出しはデッドロックを回避するためにシリアル化されています。 状態は ‘‘管理情報ベース’’ (Management Information Base、MIB) スタイルの名 前を使用して記述され、 name にリストされます。 name は長さが namelen の整 数の配列です。 sysctlbyname() 関数は、名前の ASCII 表現を受け入れ、整数の名前ベクトルを 内部的に検索します。それ以外は、標準の sysctl() 関数と同じように機能しま す。 情報は oldp で指定したバッファにコピーされます。バッファのサイズは、呼び 出しの前に oldlenp で指定した位置で与えられます。この位置は、呼び出しが正 常に完了した後およびエラーコード ENOMEM で返った後にコピーされるデータの 量を与えます。利用できるデータの量が指定のバッファサイズより大きい場合、 呼び出しは、指定バッファにちょうど入る量のデータだけを与え、エラーコード ENOMEM で返ります。古い値が不要な場合は、 oldp と oldlenp を NULL に設定 してください。 利用できるデータのサイズを決定するには、 oldp に NULL パラメータを指定し て sysctl() を呼び出します。利用できるデータのサイズが、 oldlenp の指す位 置に返されます。操作によっては空間の量が頻繁に変化することがあります。そ のような操作の場合、システムは量を切り上げようとします。返されたサイズ が、その後まもなくデータを返す呼び出しに十分であるようにするためです。 新しい値を設定するため、 newp は、長さが newlen のバッファを指すように設 定されます。このバッファから、要求された値が取得されます。新しい値が設定 されないと、 newp は NULL に設定され、 newlen は 0 に設定されます。 sysctlnametomib() 関数は、ASCII 表現の名前を受け付け、整数の名前ベクトル を検索し、 mibp で指される mib 配列中に、数値表現を格納して返します。 mib 配列中の要素数は、呼び出し前に sizep で指定された場所が与えます。呼び出し が成功した後には、この場所には、コピーされた要素数が与えられます。結果の mib と size は、後で sysctl() 呼び出しに使用して、要求した ASCII 名に関連 付けられているデータを取得可能です。同じ名前の変数を繰り返し要求するアプ リケーションが使用することを、このインタフェースは意図しています ( sysctl() 関数は、 sysctlbyname() 関数で実現される要求と同じことを、約 1/3 の時間で実行します)。 sysctlbyname() 関数は、 mib の前置詞を取得してこれ に最後の構成要素を付加するためにも有用です。例えば、PID が 100 未満のプロ セスのプロセス情報を取得するには、次のようにします: int i, mib[4]; size_t len; struct kinfo_proc kp; /* Fill out the first three components of the mib */ len = 4; sysctlnametomib("kern.proc.pid", mib, &len); /* Fetch and print entries for pid’s < 100 */ for (i = 0; i < 100; i++) { |
mib[3] = i; |
|||
len = sizeof(kp); |
|||
if (sysctl(mib, 4, &kp, &len, NULL, 0) == -1) |
|||
perror("sysctl"); |
|||
else if (len > 0) |
|||
printkproc(&kp); |
} 1 番上のレベルの名前は 〈sys/sysctl.h〉 に CTL_ 接頭語付きで定義されます。 次のとおりです。次のレベルおよびそれ以下のレベルは、ここにリストするイン クルードファイル内にあり、以降の個別のセクションで説明します。 |
名前 次のレベル名 解説 たとえば、システムで許容されるプロセスの最大数を取り出す方法は次のとおり です。 int mib[2], maxproc; size_t len; mib[0] = CTL_KERN; mib[1] = KERN_MAXPROC; len = sizeof(maxproc); sysctl(mib, 2, &maxproc, &len, NULL, 0); システムユーティリティの標準検索パスを取り出す方法は次のとおりです。 int mib[2]; size_t len; char *p; mib[0] = CTL_USER; mib[1] = USER_CS_PATH; sysctl(mib, 2, NULL, &len, NULL, 0); p = malloc(len); sysctl(mib, 2, p, &len, NULL, 0); |
CTL_DEBUG |
デバッグ変数はシステムごとにさまざまです。デバッグ変数を追加または削除す るとき、それを認識するように sysctl() をコンパイルし直す必要はありませ ん。実行のたびに、 sysctl() が、カーネルからデバッグ変数のリストを取得 し、その現在値を表示するからです。システムは 20 個の (struct ctldebug) 変 数を定義します。これらは debug0 から debug19 という名前になります。これら は別個の変数として宣言されるので、対応変数の位置で個別に初期化できます。 ローダーは、変数が複数の場所で初期化されたときはエラーを出して、同じ変数 が複数に使用されるのを回避します。たとえば、変数 dospecialcheck をデバッ グ変数としてエクスポートする場合には、次の宣言が使用できます。 int dospecialcheck = 1; struct ctldebug debug5 = { "dospecialcheck", &dospecialcheck }; |
CTL_VFS |
明瞭な第 2 レベルの名称 VFS_GENERIC は、すべてのファイルシステムに関する 一般情報を取得するのに使用します。これの第 3 レベルの識別子の 1 つは VFS_MAXTYPENUM で、最も大きいファイルシステムタイプの番号を与えます。別の 第 3 レベルの識別子は VFS_CONF で、第 4 レベルの識別子として与えられた ファイルシステムタイプに関する構成を返します ( 使用法の例は getvfsbyname(3) を参照 ) 。残りの第 2 レベルの識別子は、 statfs(2) 呼び出 しまたは VFS_CONF が返すファイルシステムタイプ番号です。各ファイルシステ ムについて利用できる第 3 レベルの識別子は、そのファイルシステムのマウント 引数構造を定義するヘッダファイルで指定されます。 |
CTL_HW |
CTL_HW レベルに関して利用できるストリングと整数については以下で詳しく説明 します。変更可能性の列は、適切な特権のあるプロセスが値を変更できるかどう かを示します。 第 2 レベル名 タイプ 変更可能 |
HW_MACHINE
マシンクラス HW_MODEL HW_NCPU HW_BYTEORDER HW_PHYSMEM HW_USERMEM HW_PAGESIZE HW_FLOATINGPOINT HW_MACHINE_ARCH CTL_KERN |
第 2 レベル名 タイプ 変更可能 |
KERN_ARGMAX 整数 いいえ |
KERN_BOOTFILE ストリング はい |
KERN_BOOTTIME struct timeval いいえ |
KERN_CLOCKRATE struct clockinfo いいえ |
KERN_FILE struct file いいえ |
KERN_HOSTID 整数 はい |
KERN_HOSTNAME ストリング はい |
KERN_JOB_CONTROL 整数 いいえ |
KERN_MAXFILES 整数 はい |
KERN_MAXFILESPERPROC 整数 はい |
KERN_MAXPROC 整数 いいえ |
KERN_MAXPROCPERUID 整数 はい |
KERN_MAXVNODES 整数 はい |
KERN_NGROUPS 整数 いいえ |
KERN_NISDOMAINNAME ストリング はい |
KERN_OSRELDATE 整数 いいえ |
KERN_OSRELEASE ストリング いいえ |
KERN_OSREV 整数 いいえ |
KERN_OSTYPE ストリング いいえ |
KERN_POSIX1 整数 いいえ |
KERN_PROC struct proc いいえ |
KERN_PROF node 適用不可 |
KERN_QUANTUM 整数 はい |
KERN_SAVED_IDS 整数 いいえ |
KERN_SECURELVL 整数 累乗のみ |
KERN_UPDATEINTERVAL 整数 いいえ |
KERN_VERSION ストリング いいえ |
KERN_VNODE struct vnode いいえ |
KERN_ARGMAX
execve(2) への引数の最大バイト数 KERN_BOOTFILE KERN_BOOTTIME KERN_CLOCKRATE KERN_FILE KERN_HOSTID KERN_HOSTNAME KERN_JOB_CONTROL KERN_MAXFILES KERN_MAXFILESPERPROC KERN_MAXPROC KERN_MAXPROCPERUID KERN_MAXVNODES KERN_NGROUPS KERN_NISDOMAINNAME KERN_OSRELDATE KERN_OSRELEASE KERN_OSREV KERN_OSTYPE KERN_POSIX1 KERN_PROC |
第 3 レベル名 第 4 レベル名 |
KERN_PROC_ALL なし |
KERN_PROC_PID プロセス ID |
KERN_PROC_PGRP プロセスグループ |
KERN_PROC_TTY tty デバイス |
KERN_PROC_UID ユーザ ID |
KERN_PROC_RUID リアルユーザ ID |
KERN_PROF
カーネルに関するプロファイル化情報を返します。カーネルをプロファ イル化用にコンパイルしないと、 KERN_PROF 値を取り出そうとしても、 ENOENT で処理は失敗します。ストリング用の第 3 レベル名および整数 プロファイル化情報について以下に詳しく説明します。 ( 変更可能性の 列は、該当する特権のあるプロセスが値を変更できるかどうかを示しま す。 |
第 3 レベル名 タイプ 変更可能 |
GPROF_STATE 整数 はい |
GPROF_COUNT u_short[] はい |
GPROF_FROMS u_short[] はい |
GPROF_TOS struct tostruct はい |
GPROF_GMONPARAM struct gmonparam いいえ |
変数は次のとおりです。 |
GPROF_STATE
GMON_PROF_ON または GMON_PROF_OFF を返して、プロファイル 化が進行中であるか、または停止しているかを示します。 GPROF_COUNT GPROF_FROMS GPROF_TOS GPROF_GMONPARAM KERN_QUANTUM KERN_SAVED_IDS KERN_SECURELVL KERN_VERSION KERN_VNODE CTL_MACHDEP |
第 2 レベル名 タイプ 変更可能 |
CPU_CONSDEV dev_t いいえ |
CPU_ADJKERNTZ 整数 はい |
CPU_DISRTCSET 整数 はい |
CPU_BOOTINFO struct bootinfo いいえ |
CPU_WALLCLOCK 整数 はい |
CTL_NET |
CTL_NET レベルに利用できるストリングと整数については以下に詳しく説明しま す。変更可能性の列は、該当する特権のあるプロセスが値を変更できるかどうか を示します。 |
第 2 レベル名 タイプ 変更可能 |
PF_ROUTE
ルーティングテーブル全体またはそのサブセットを返します。データ は、ルーティングメッセージのシーケンスとして返されます ( ヘッダ ファイル、形式、および意味については route(4) を参照 )。各メッ セージの長さはメッセージヘッダに組み込まれています。 第 3 レベル名はプロトコル番号で、現時点では必ず 0 です。第 4 レベ ル名はアドレスファミリで、これを 0 に設定するとすべてのアドレス ファミリを選択できます。第 5 レベル名と第 6 レベル名は次のとおり です。 |
第 5 レベル名 第 6 レベル |
NET_RT_FLAGS rtflags |
NET_RT_DUMP なし |
NET_RT_IFLIST なし |
PF_INET
IPv4 (インターネットプロトコルバージョン 4) に関する各種のグロー バルな情報を取得または設定します。第 3 レベル名はプロトコルです。 第 4 レベル名は変数名です。現時点で定義されているプロトコルと名前 は次のとおりです。 プロトコル 変数 タイプ 変更可能 変数は次のとおりです。 |
icmp.bmcastecho
ブロードキャストまたはマルチキャストのアドレスへの ICMP エコー要求が応答される必要がある場合は 1 を返します。 icmp.maskrepl ip.forwarding ip.redirect ip.ttl udp.checksum 変数 net.inet.*.ipsec については ipsec(4) を参照してくだ さい。 PF_INET6 変数 net.inet6.* については inet6(4) を参照してください。変数 net.inet6.*.ipsec6 については ipsec(4) を参照してください。 CTL_USER |
第 2 レベル名 タイプ 変更可能 |
USER_BC_BASE_MAX 整数 いいえ |
USER_BC_DIM_MAX 整数 いいえ |
USER_BC_SCALE_MAX 整数 いいえ |
USER_BC_STRING_MAX 整数 いいえ |
USER_COLL_WEIGHTS_MAX 整数 いいえ |
USER_CS_PATH ストリング いいえ |
USER_EXPR_NEST_MAX 整数 いいえ |
USER_LINE_MAX 整数 いいえ |
USER_POSIX2_CHAR_TERM 整数 いいえ |
USER_POSIX2_C_BIND 整数 いいえ |
USER_POSIX2_C_DEV 整数 いいえ |
USER_POSIX2_FORT_DEV 整数 いいえ |
USER_POSIX2_FORT_RUN 整数 いいえ |
USER_POSIX2_LOCALEDEF 整数 いいえ |
USER_POSIX2_SW_DEV 整数 いいえ |
USER_POSIX2_UPE 整数 いいえ |
USER_POSIX2_VERSION 整数 いいえ |
USER_RE_DUP_MAX 整数 いいえ |
USER_STREAM_MAX 整数 いいえ |
USER_TZNAME_MAX 整数 いいえ |
USER_BC_BASE_MAX
bc(1) ユーティリティ内の最大 ibase/obase 値 USER_BC_DIM_MAX USER_BC_SCALE_MAX USER_BC_STRING_MAX USER_COLL_WEIGHTS_MAX USER_CS_PATH USER_EXPR_NEST_MAX USER_LINE_MAX USER_POSIX2_CHAR_TERM USER_POSIX2_C_BIND USER_POSIX2_C_DEV USER_POSIX2_FORT_DEV USER_POSIX2_FORT_RUN USER_POSIX2_LOCALEDEF USER_POSIX2_SW_DEV USER_POSIX2_UPE USER_POSIX2_VERSION USER_RE_DUP_MAX USER_STREAM_MAX USER_TZNAME_MAX CTL_VM |
第 2 レベル名 タイプ 変更可能 |
VM_LOADAVG struct loadavg いいえ |
VM_METER struct vmtotal いいえ |
VM_PAGEOUT_ALGORITHM 整数 はい |
VM_SWAPPING_ENABLED 整数 おそらく |
VM_V_CACHE_MAX 整数 はい |
VM_V_CACHE_MIN 整数 はい |
VM_V_FREE_MIN 整数 はい |
VM_V_FREE_RESERVED 整数 はい |
VM_V_FREE_TARGET 整数 はい |
VM_V_INACTIVE_TARGET 整数 はい |
VM_V_PAGEOUT_FREE_MIN 整数 はい |
VM_LOADAVG
負荷平均履歴を返します。返されたデータは struct loadavg で構成さ れます。 VM_METER VM_PAGEOUT_ALGORITHM VM_SWAPPING_ENABLED VM_V_CACHE_MAX VM_V_CACHE_MIN VM_V_FREE_MIN VM_V_FREE_RESERVED VM_V_FREE_TARGET VM_V_INACTIVE_TARGET VM_V_PAGEOUT_FREE_MIN 戻り値 |
成功して終了したときには値 0 を返します。そうでない場合、値 -1 が返され、 グローバル変数 errno が設定されてエラーを示します。 |
エラー
次のエラーが報告される可能性があります。 |
[EFAULT]
バッファ name、 oldp、 newp、または長さポインタ oldlenp に無効なアドレスが含まれています。 [EINVAL] [EINVAL] [ENOMEM] [ENOTDIR] [EISDIR] [ENOENT] [EPERM] [EPERM] ファイル |
〈sys/sysctl.h〉
1 番上のレベルの識別子の定義、 2 番めのレベルのカー
ネルおよびハードウェア識別子、およびユーザレベル識 別子 関連項目 |
歴史
sysctl() 関数は 4.4BSD で最初に取り入れられました。 FreeBSD 10.0 January 23, 2001 FreeBSD 10.0 |