other versions
other sections
SYSLOG(2) | Linux Programmer's Manual | SYSLOG(2) |
名前¶
syslog, klogctl - カーネルのメッセージ・リング・バッファを読んだり消去したりする; console_loglevel の設定を行う書式¶
int syslog(int type, char *bufp, int len); /* glibc ではラッパー関数は提供されていない *//* glibc のインタフェース */#include <sys/klog.h>int klogctl(int type, char *bufp, int len);
説明¶
( syslogd(8) と話す) C ライブラリ関数の syslog() が必要な場合は、 syslog(3) を見ること。この名前のシステム・コールはカーネルの printk() バッファを制御するものであり、glibc ラッパー関数は klogctl() と呼ばれている。0 -- ログを閉じる。現在の実装では何もしない (NOP) 。 1 -- ログを開く。現在の実装では何もしない (NOP) 。 2 -- ログから読み出す。 3 -- リング・バッファに残っているメッセージをすべて読み出す。 4 -- リング・バッファに残っているメッセージをすべて読み出し、消去する。 5 -- リングバッファを消去する。 6 -- コンソールへの printk を無効にする。 7 -- コンソールへの printk を有効にする。 8 -- コンソールに表示されるメッセージのレベルを設定する。 9 -- ログバッファの未読の文字数を返す。 10 -- ログバッファのサイズを返す。
カーネル・ログ・バッファ (kernel log buffer)¶
カーネルは長さ LOG_BUF_LEN の巡回式のバッファを持っており、 それにはカーネル関数の printk() の引き数として与えられた メッセージが (そのログレベルにかかわらず) 格納される。 初期のカーネルでは LOG_BUF_LEN の値は 4096 であった。 カーネル 1.3.54 からは 8192、 カーネル 2.1.113 からは 16384 になり、 カーネル 2.4.23 以降および 2.6 以降ではカーネルのコンパイル時に 値を設定できるようになっている。 最近のカーネルでは、コマンド 10 でバッファのサイズを問い合わせできる。ログレベル (loglevel)¶
カーネル・ルーチンの printk() は、ログレベルが console_loglevel 変数より小さいときにのみ、コンソールにメッセージを表示する。 console_loglevel は最初 DEFAULT_CONSOLE_LOGLEVEL (7) に設定されるが、起動時にカーネルの コマンド・ライン・オプションに "debug" という単語が含まれている場合は 10 に設定され、カーネル・フォールトが発生した場合には 15 に設定される (但し、10 や 15 という数字に意味はなく、8 と同等である)。 この変数は syslog(8,dummy,value). 呼び出しによって設定され、値の範囲は 1-8 である。 syslog(type,dummy,dummy) 呼び出しで type が 6 もしくは 7 の場合、 console_loglevel は 1 (カーネル・パニックのみ)、 7 (デバッグ・メッセージ以外の全て) にそれぞれ設定される。#define KERN_EMERG "<0>" /* システムが使用不能 */ #define KERN_ALERT "<1>" /* 直ちに対処が必要 */ #define KERN_CRIT "<2>" /* 致命的な状態 */ #define KERN_ERR "<3>" /* エラー状態 */ #define KERN_WARNING "<4>" /* 警告状態 */ #define KERN_NOTICE "<5>" /* 通常状態だが大事な情報 */ #define KERN_INFO "<6>" /* 通知 */ #define KERN_DEBUG "<7>" /* デバッグレベルの情報 */
返り値¶
type が 2, 3, 4 の場合、成功すると syslog() は読み出したバイト数を返す。 type が 9 の場合、 カーネル・ログバッファにある現在読み出し可能なバイト数を返す。 type が 10 の場合、 カーネル・ログバッファの総量を返す。 type がそれ以外の値の場合、成功すると 0 が返される。エラー¶
- EINVAL
- 不正な引き数 (具体的には、 type が正しくない、もしくは type が 2, 3, 4 の場合に buf が NULL か len が 0 未満である、もしくは type が 8 の場合に level が 1 以上 8 以下の範囲に入っていない)。
- ENOSYS
- カーネルの設定オプション CONFIG_PRINTK を無効にしてカーネルがコンパイルされているため、 syslog() システムコールが利用できない。
- EPERM
- 十分な権限を持たないプロセス (正確にはケーパビリティ CAP_SYS_ADMIN も CAP_SYSLOG も持たないプロセス) が console_loglevel を変更しようとしたか、 カーネル・メッセージ・リングを消去しようとした。
- ERESTARTSYS
- システム・コールがシグナルによって割り込まれ、何も読み出せなかった。 (トレース中にしか発生することはない)
準拠¶
このシステム・コールは Linux 特有であり、移植を意図したプログラムでは 使用してはいけない。注意¶
かなり初期の頃から、同じ名前を持つシステムコールとライブラリルーチンが 全く異なる別物であるのは不幸なことだと指摘されてきた。関連項目¶
syslog(3), capabilities(7)この文書について¶
この man ページは Linux man-pages プロジェクトのリリース 3.41 の一部 である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。2012-05-05 | Linux |