EN JA
ERR(3)
ERR(3) FreeBSD Library Functions Manual ERR(3)

名称

err, verr, errc, verrc, errx, verrx, warn, vwarn, warnc, vwarnc, warnx, vwarnx, err_set_exit, err_set_file書式化されたエラーメッセージ

ライブラリ

Standard C Library (libc, -lc)

書式

#include < err.h>

void
err( int eval, const char *fmt, ...);

void
err_set_exit( void (*exitf)(int));

void
err_set_file( void *vfp);

void
errc( int eval, int code, const char *fmt, ...);

void
errx( int eval, const char *fmt, ...);

void
warn( const char *fmt, ...);

void
warnc( int code, const char *fmt, ...);

void
warnx( const char *fmt, ...);

#include < stdarg.h>

void
verr( int eval, const char *fmt, va_list args);

void
verrc( int eval, int code, const char *fmt, va_list args);

void
verrx( int eval, const char *fmt, va_list args);

void
vwarn( const char *fmt, va_list args);

void
vwarnc( int code, const char *fmt, va_list args);

void
vwarnx( const char *fmt, va_list args);

解説

err() と warn() 関数ファミリは、標準エラー出力、または err_set_file() 関数を使用して指定された別のファイルに書式化されたエラーメッセージを表示します。すべての場合に、プログラム名の最後の構成要素、コロン文字と空白が、出力されます。 fmt 引数が NULL でないなら、 printf(3) のような、書式化されたエラーメッセージが、出力されます。出力は、改行文字によって終了します。

err(), errc(), verr(), verrc(), warn(), warnc(), vwarn() と vwarnc() 関数は、 fmt 引数が NULL でないなら、別のコロンと空白によって先行された、供給されたエラーコード値、またはグローバル変数 errno に基づいた strerror(3) から取得されるエラーメッセージを付け加えます。

errc(), verrc(), warnc() と vwarnc() 関数の場合に、 code 引数は、エラーメッセージを検索するために使用されます。

err(), verr(), warn() と vwarn() 関数は、エラーメッセージを検索するためにグローバル変数 errno を使用します。

errx() と warnx() 関数は、エラーメッセージを付け加えません。

err(), verr(), errc(), verrc(), errx() と verrx() 関数は、返りませんが、引数 eval の値で終了します。 sysexits(3) で定義された標準の値が eval の値に使用されることは、推奨されます。何らかの必要なクリーンアップを実行するために exit(3) の前に呼び出される関数を指定するために err_set_exit() 関数を使用することができます。 exitf に対して NULL の関数ポインタを渡すことは、何も行わないフックをリセットします。 err_set_file() 関数は、他の関数によって使用される出力ストリームを設定します。その vfp 引数は、オープンしたストリームへのポインタ (たぶん既に void * に変換されている)、または NULL ポインタ (その場合、出力ストリームは、標準エラーに設定される) のいずれかでなければなりません。

使用例

現在の errno 情報文字列を表示して、終了します:

if ((p = malloc(size)) == NULL) 
 err(EX_OSERR, NULL); 
if ((fd = open(file_name, O_RDONLY, 0)) == -1) 
 err(EX_NOINPUT, "%s", file_name);

エラーメッセージを表示して、終了します:

if (tm.tm_hour < START_TIME) 
 errx(EX_DATAERR, "too early, wait until %s", 
     start_time_string);

エラーの警告は、次の通りです:

if ((fd = open(raw_device, O_RDONLY, 0)) == -1) 
 warnx("%s: %s: trying the block device", 
     raw_device, strerror(errno)); 
if ((fd = open(block_device, O_RDONLY, 0)) == -1) 
 err(EX_OSFILE, "%s", block_device);

グローバル変数 errno を使用しないエラーの警告は、次の通りです:

error = my_function(); /* <errno.h>からの値を返します */ 
if (error != 0) 
 warnc(error, "my_function");

規格

err() と warn() 関数ファミリは、 BSD 拡張です。そういうものとして、それらは、本当に移植性のあるコードで使用されるべきではありません。 strerror() または同様の関数を代わりに使用してください。

歴史

err() と warn() 関数は、 4.4BSD ではじめて登場しました。 err_set_exit() と err_set_file() 関数は、 FreeBSD 2.1 ではじめて登場しました。 errc() と warnc() 関数は、 FreeBSD 3.0 ではじめて登場しました。
March 29, 2012 FreeBSD