int syslog(int type, char *bufp, int len);
/* glibc ではラッパー関数は提供されていない */
/* glibc のインタフェース */
#include <sys/klog.h>
int klogctl(int type, char *bufp, int len);
type 引き数はこの関数の動作を決定する。
kernel/printk.c からの引用 :
/* * Commands to sys_syslog: * * 0 -- ログを閉じる。現在の実装では何もしない (NOP) 。 * 1 -- ログを開く。現在の実装では何もしない (NOP) 。 * 2 -- ログから読み出す。 * 3 -- リング・バッファに残っているメッセージをすべて読み出す。 * 4 -- リング・バッファに残っているメッセージをすべて読み出し、消去する。 * 5 -- リングバッファを消去する。 * 6 -- コンソールへの printk を無効にする。 * 7 -- コンソールへの printk を有効にする。 * 8 -- コンソールに表示されるメッセージのレベルを設定する。 * 9 -- ログバッファの未読の文字数を返す。 * 10 -- ログバッファのサイズを返す。 */
非特権プロセスにはコマンド 3 と 10 のみが許可されている (コマンド 9 は Linux 2.4.10 で、コマンド 10 は Linux 2.6.6 で追加された)。
syslog(2,buf,len) の呼び出しはカーネル・ログ・バッファが空でなくなるまで待って、 最大 len バイトまで buf へと読み出し、読み込んだ バイト数を返す。ログから読まれたバイトはログ・バッファから消える: 情報は一度しか読むことができない。 これはユーザーのプログラムが /proc/kmsg を読んだ時にカーネルによって実行される関数でもある。
syslog(3,buf,len) の呼び出しはログ・バッファの最後の len バイトを (非破壊的に)読み出す、しかし、直近の「リング・バッファ消去」命令 (この命令はバッファを消去するわけではない) 以降にバッファに書き込まれた情報しか読み出せない。 返り値は読み込んだバイト数である。
syslog(4,buf,len) 呼び出しは「リング・バッファ消去」命令も実行する以外は 機能 3 と完全に同じである。
syslog(5,dummy,dummy) 呼び出しは「リング・バッファ消去」命令のみを実行する (呼び出しの書式で、 buf や len が "dummy" と記載されている場合、その引き数の値が無視されることを表す)。
syslog(6,dummy,dummy) 呼び出しはコンソールのログレベルを最小に設定し、 コンソールにメッセージが表示されないようにする。
syslog(7,dummy,dummy) 呼び出しはコンソールのログレベルをデフォルトに設定し、 コンソールにメッセージが表示されるようにする。
syslog(8,dummy,level) 呼び出しはコンソールのログレベルを level に設定する。 level は 1 以上 8 以下の整数でなければならない。 詳細は ログレベル (loglevel) の節を参照のこと。
syslog(9,dummy,dummy) 呼び出しはカーネル・ログバッファにある現在読み出し可能なバイト数を返す。
syslog(10,dummy,dummy) 呼び出しはカーネル・ログバッファの総量を返す。
メッセージの各行はそれぞれにログレベルを持つ。このログレベルは DEFAULT_MESSAGE_LOGLEVEL - 1 (6) であるが、 <d> (d は 1-7 の範囲の数字) で始まる行の ログレベルは d である。 ログレベルの慣習的な意味は <linux/kernel.h> に以下のように定義されている:
#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>" /* デバッグレベルの情報 */
エラーの場合は、-1 が返り、 errno にエラーを示す値が設定される。