EN JA
PRINTF(9)
PRINTF(9) FreeBSD Kernel Developer's Manual PRINTF(9)

名称

printf, uprintf, tprintf, logフォーマットされた出力の変換

書式

#include < sys/types.h>
#include < sys/systm.h>

int
printf( const char *fmt, ...);

void
tprintf( struct proc *p, int pri, const char *fmt, ...);

int
uprintf( const char *fmt, ...);

#include < sys/syslog.h>

void
log( int pri, const char *fmt, ...);

解説

printf(9) ファミリの関数は printf(3) ファミリの関数と類似しています。この異なった関数はそれぞれ異なった出力ストリームを使用します。 uprintf() 関数は現在のプロセスが制御している tty に出力しますが、 printf() はロギングファシリティおよびコンソールに出力します。 tprintf() 関数は pri が-1 でない場合には、プロセス p に関連づけられた tty およびロギングファシリティに出力します。 log() 関数は pri によって示されたログレベルを使用して、カーネルのロギングファシリティにメッセージを送ります。

これらそれぞれの関連した関数は、 printf(3) と同じ方法で fmt パラメータを使用します。しかしながら、 printf(9) は 2 つの他の変換指定子を追加しています。

%b 識別子は 2 つの引数を期待します。 int および char * です。これらはビットマスクのデコードのため、レジスタ値と印字マスクとして使用されます。この印字マスクは 2 つの部分で構成されます。基数と引数です。基数値は整数値として表現される出力の基数です。例えば、\10 は 8 進数を\20 は 16 進数を与えます。引数はビット識別子の並びとして構成されます。個々のビット識別子はこの識別子が表す (1 から始まる) ビットの番号の整数値で始まります。識別子の残り部分はそのビットの名前を含む文字列です。この文字列は次のビット識別子の始まりのビット番号、または最後のビット識別子のために NUL で終端されます。

%D 識別子は 16 進ダンプを補助することを意図されています。これは 2 つの引数を要求します。 u_char * ポインタおよび char * 文字列です。ポインタが指しているメモリは、16 進数で一度に 1 バイト出力されます。文字列は個々のバイトの間のデリミタとして使用されます。もし存在すれば、幅ディレクティブが表示するバイト数を指定します。デフォルトでは、16 バイトのデータが出力されます。

log() 関数はその pri 引数 (ここは誤解されて‘priority (優先度)’と呼ばれていた) に syslog(3) のレベル値の LOG_DEBUG から LOG_EMERG までを使用します。代わりに、 pri に-1 が与えられた場合には、そのメッセージはその前の log() の呼び出しによって開始された、最近のログメッセージに追加されます。これらのメッセージはカーネル自身によって生成されるため、このファシリティは常に LOG_KERN となります。

戻り値

printf() および uprintf() 関数は表示された文字数を返します。

使用例

この使用例は %b%D 変換指定子の使用方法を示しています。関数

void 
printf_test(void) 
{ 
 
 printf("reg=%b\n", 3, "\10\2BITTWO\1BITONE\n"); 
 printf("out: %4D\n", "AAAA", ":"); 
}

は、下記の出力を発生させます。

reg=3<BITTWO,BITONE> 
out: 41:41:41:41

この呼び出し

log(LOG_DEBUG, "%s%d: been there.\n", sc->sc_name, sc->sc_unit);

は適切なデバッグメッセージを優先度“ kern.debug”でシステムログに追加します。

関連項目

printf(3), syslog(3)
September 8, 2006 FreeBSD