ERR(3)

名称
err, verr, errc, verrc, errx, verrx, warn, vwarn, warnc, vwarnc, warnx, vwarnx, err_set_file, err_set_exit - フォーマットされたエラーメッセージ

書式
#include <err.h> void err(int eval, const char *fmt, ...) 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 <stdio.h> void err_set_file(FILE *fp) void err_set_exit(void (*exitf)(int)) #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 でない場合、 フォーマット済みのエラーメッセージが出力されます。 errc(), verrc(), warnc(), および vwarnc() の各関数の場合、 code 引数で密接な関係のあるエラーメッセージも出力されます。 必要であれば、別のコロンとスペースが前に付けられます。 すべての場合に、出力の後には改行キャラクタが続きます。

err(), verr(), warn(), および vwarn() の各関数は、 errc() ファミリの code 引数ではなく、グローバル変数 errno を使用します。

err(), verr(), errc(), verrc(), errx(), および verrx() の各関数は、 戻りませんが、引数 eval の値で終了します。 err_set_exit() 関数を使用して、 exit(3) の前に呼び出される関数を指定して、必要なクリーンアップを 実行できます。 exitf 用に NULL 関数ポインタを割り当てると、フックが 何もしないようにリセットされます。

例
現在の errno 情報を表示し終了します。

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

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

    if (tm.tm_hour < START_TIME)
    	errx(1, "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(1, "%s", block_device);

グローバル変数 errno を使用しないエラーの警告

    error = my_function();	/* returns a value from <errno.h> */
    if (error != 0)
    	warnc(error, "my_function");

関連項目
exit(3), strerror(3)

歴史
err() 関数と warn() 関数は最初に 4.4BSD で現れました。 err_set_file() 関数と err_set_exit() 関数は最初に FreeBSD 2.1 で現れました。 errc() 関数と warnc() 関数は最初に FreeBSD 3.0 で現れました。