Provided by: manpages-ja-dev_0.5.0.0.20221215+dfsg-1_all bug

名前

       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) を参照のこと。

       このページはカーネルの syslog() システムコールについて説明している。 syslog() システムコー
       ルはカーネルの printk() バッファーを制御するために使用される。  このシステムコールに対する
       glibc ラッパー関数は klogctl() と呼ばれている。

   カーネルログバッファー (kernel log buffer)
       カーネルは長さ   LOG_BUF_LEN   の巡回式のバッファーを持っており、   それにはカーネル関数の
       printk() の引数として与えられた メッセージが (そのログレベルにかかわらず) 格納される。  初
       期のカーネルでは LOG_BUF_LEN の値は 4096 であった。 カーネル 1.3.54 からは 8192、 カーネル
       2.1.113 からは 16384 になり、 カーネル 2.4.23 以降および 2.6  以降ではカーネル設定オプショ
       ン  (CONFIG_LOG_BUF_SHIFT、 デフォルト値はアーキテクチャー依存) で値を設定できるようになっ
       ている。 Linux 2.6.6 以降では、コマンド 10 (下記参照) でバッファーのサイズを問い合わせでき
       る。

   コマンド
       type  引数はこの関数が行う動作を決定する。 以下のリストに示す値を type に指定できる。 シン
       ボル名はカーネルソースで定義されているが、ユーザー空間には公開されていない。      したがっ
       て、数字を使うか、名前を自分で定義する必要がある。

       SYSLOG_ACTION_CLOSE (0)
              ログをクローズする。現在のところ NOP である。

       SYSLOG_ACTION_OPEN (1)
              ログをオープンする。現在のところ NOP である。

       SYSLOG_ACTION_READ (2)
              ログを読み出す。  この呼び出しは、 カーネルログバッファーが空でなくなるまで待って、
              最大 len バイトまで bufp が指すバッファーに読み込み、 読み込んだバイト数を返す。 ロ
              グから読まれたバイトはログバッファーから消える。 つまり、情報は一度しか読むことがで
              きない。 これはユーザーのプログラムが /proc/kmsg を読んだ時にカーネルによって実行さ
              れる関数でもある。

       SYSLOG_ACTION_READ_ALL (3)
              リングバッファーに残っているメッセージをすべて読み出し、  bufp が指すバッファーに格
              納する。 この呼び出しログバッファーの最後の len バイトを (非破壊的に)  読み出すが、
              最後の「リングバッファー消去」命令 (下記のコマンド 5 参照) 以降にバッファーに書き込
              まれた情報しか読み出せない。 返り値は読み込んだバイト数である。

       SYSLOG_ACTION_READ_CLEAR (4)
              リングバッファーに残っているメッセージをすべて読み出し、クリアする。 この呼び出しは
              type  3  と全く同じことを行い、追加で「リングバッファー消去」 ("clear ring buffer")
              コマンドも実行する。

       SYSLOG_ACTION_CLEAR (5)
              「リングバッファー消去」 ( は無視される。

              このコマンドは実際にリングバッファーをクリアするわけではなく、      コマンド      3
              (SYSLOG_ACTION_READ_ALL)  と 4 (SYSLOG_ACTION_READ_CLEAR で返す内容を決定するカーネ
              ルの管理変数を設定する。  このコマンドはコマンド  2   (SYSLOG_ACTION_READ)   と   9
              (SYSLOG_ACTION_SIZE_UNREAD) には影響を与えない。

       SYSLOG_ACTION_CONSOLE_OFF (6)
              このコマンドは  console_loglevel  の現在の値を保存し、それから  console_loglevelminimum_console_loglevel に設定する。  これにより、コンソールにメッセージが出力され
              なくなる。   Linux   2.6.32   より前では、   このコマンドは   console_loglevelminimum_console_loglevel に設定するだけであった。 下記の /proc/sys/kernel/printk の
              議論を参照。

              引数 bufplen は無視される。

       SYSLOG_ACTION_CONSOLE_ON (7)
              直前に      SYSLOG_ACTION_CONSOLE_OFF     コマンドがされた場合、     このコマンドは
              console_loglevel を前のコマンドが保存した値に戻す。 Linux 2.6.32 より前では、  この
              コマンドは単に  console_logleveldefault_console_loglevel に設定するだけであっ
              た。 下記の /proc/sys/kernel/printk の議論を参照。

              引数 bufplen は無視される。

       SYSLOG_ACTION_CONSOLE_LEVEL (8)
              console_loglevellen で指定された値に設定する。 len は 1 以上 8 以下の整数でなけ
              ればならない。  カーネルにより、暗黙のうちに lenminimum_console_loglevel で指定
              される最小値が適用される。 詳細は「ログレベル」の節を参照のこと。 引数 bufp  は無視
              される。

       SYSLOG_ACTION_SIZE_UNREAD (9) (Linux 2.4.10 以降)
              コマンド  2 (SYSLOG_ACTION_READ) でカーネルログバッファーから読み出せるバイト数を返
              す。 引数 bufplen は無視される。

       SYSLOG_ACTION_SIZE_BUFFER (10) (Linux 2.6.6 以降)
              カーネルログバッファーの全体のサイズを返す。 引数 bufplen は無視される。

       コマンド種別 3 と 10  以外のコマンドは全て特権が必要である。  バージョン  2.6.37  より前の
       Linux  カーネルでは、  コマンド種別 3 と 10 は非特権プロセスも呼び出すことができる。 Linux
       2.6.37 以降では、/proc/sys/kernel/dmesg_restrict が値 0 の場合に限り、  非特権プロセスはこ
       れらのコマンドを呼び出すことができる。      Linux      2.6.37     より前では、「特権を持つ
       (privileged)」とは呼び出し者が  CAP_SYS_ADMIN  ケーパビリティを持つことを意味する。  Linux
       2.6.37  以降では、「特権を持つ」とは呼び出し者が  CAP_SYS_ADMIN  ケーパビリティか (新しい)
       CAP_SYSLOG ケーパビリティのいずれかを持つことを意味する (この目的で CAP_SYS_ADMIN ケーパビ
       リティを使うのは今は非推奨である)。

   /proc/sys/kernel/printk
       /proc/sys/kernel/printk  は書き込み可能なファイルで、 エラーメッセージのログ出力を行う際に
       カーネルの printk() の動作に影響を持つ 4 つの整数値が入っている。 4 つの値は以下のとおりで
       ある。

       console_loglevel
              メッセージのログレベルがこの値よりも小さい場合のみ、メッセージだけがコンソールに出
              力される。 このフィールドのデフォルト値は DEFAULT_CONSOLE_LOGLEVEL (7) だが、  カー
              ネルのコマンドラインに   "quiet"   という単語が含まれている場合は   4  に設定され、
              "debug" という単語が含まれている場合は 10 に設定され、 カーネルフォールトが発生した
              場合には  15 に設定される (但し、10 や 15 という数字に意味はなく、8 と同等である)。
              console_loglevel の値は type が 8 の syslog() の呼び出しによって設定でき、 設定でき
              る値の範囲は 1–8 である。

       default_message_loglevel
              この値は、明示的にログレベルが指定されていない  printk() メッセージのログレベルとし
              て使用される。   Linux   2.6.38   以前では、    このフィールドのデフォルト値は    4
              (KERN_WARNING)  にハードコードされていた。  Linux  2.6.39 以降では、 デフォルト値は
              カーネルの設定オプション CONFIG_DEFAULT_MESSAGE_LOGLEVEL で定義されており、  デフォ
              ルト値は 4 である。

       minimum_console_loglevel
              このフィールドの値は console_loglevel に設定できる最小値である。

       default_console_loglevel
              console_loglevel のデフォルト値である。

   ログレベル
       すべての  printk() メッセージにはそれぞれログレベルがある。 ログレベルがメッセージの一部と
       して明示的に指定されなかった場合は、 ログレベルは default_message_loglevel  になる。ログレ
       ベルの一般的な意味は以下のとおりである。

       カーネル定数   レベル値   意味
       KERN_EMERG        0       システムが使用不可
       KERN_ALERT        1       直ちに対応しなければならない
       KERN_CRIT         2       危険な状況
       KERN_ERR          3       エラー状況
       KERN_WARNING      4       警告状況
       KERN_NOTICE       5       通常だが重要な状況
       KERN_INFO         6       参考情報
       KERN_DEBUG        7       デバッグレベルのメッセージ

       カーネルの printk() ルーチンは、メッセージのログレベルが console_loglevel よりも小さい値の
       場合にのみ、 メッセージをコンソールに出力する。

返り値

       type が 2, 3, 4 の場合、成功すると syslog()  は読み出したバイト数を返す。 type が  9  の場
       合、  カーネルログバッファーにある現在読み出し可能なバイト数を返す。  type  が 10 の場合、
       カーネルログバッファーの総量を返す。 type がそれ以外の値の場合、成功すると 0 が返される。

       エラーの場合は、-1 が返り、 errno にエラーを示す値が設定される。

エラー

       EINVAL 不正な引数 (具体的には、 type が正しくない、もしくは type が 2, 3, 4  の場合に  buf
              が  NULL か len が 0 未満である、もしくは type が 8 の場合に level が 1 以上 8 以下
              の範囲に入っていない)。

       ENOSYS カーネルの設定オプション CONFIG_PRINTK を無効にしてカーネルがコンパイルされているた
              め、 syslog() システムコールが利用できない。

       EPERM  十分な権限を持たないプロセス (正確にはケーパビリティ CAP_SYS_ADMINCAP_SYSLOG も
              持たないプロセス) が console_loglevel を変更しようとしたか、 カーネルメッセージリン
              グを消去しようとした。

       ERESTARTSYS
              システムコールがシグナルによって割り込まれ、何も読み出せなかった。  (トレース中にし
              か発生することはない)

準拠

       このシステムコールは Linux 特有であり、移植を意図したプログラムでは 使用してはいけない。

注意

       かなり初期の頃から、同じ名前を持つシステムコールとライブラリルーチンが  全く異なる別物であ
       るのは不幸なことだと指摘されてきた。

関連項目

        dmesg(1), syslog(3), capabilities(7)

この文書について

       この man ページは Linux man-pages プロジェクトのリリース 5.10 の一部である。プロジェクトの
       説明とバグ報告に関する情報は https://www.kernel.org/doc/man-pages/ に書かれている。