.\" Copyright (c) 1993 .\" The Regents of the University of California. All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by the University of .\" California, Berkeley and its contributors. .\" 4. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" From: @(#)err.3 8.1 (Berkeley) 6/9/93 .\" %FreeBSD: src/lib/libc/gen/err.3,v 1.11.2.6 2001/12/14 18:33:51 ru Exp % .\" .\" $FreeBSD$ .Dd March 6, 1999 .Dt ERR 3 .Os .Sh 名称 .Nm err , .Nm verr , .Nm errc , .Nm verrc , .Nm errx , .Nm verrx , .Nm warn , .Nm vwarn , .Nm warnc , .Nm vwarnc , .Nm warnx , .Nm vwarnx , .Nm err_set_exit , .Nm err_set_file .Nd フォーマットされたエラーメッセージ .Sh ライブラリ .Lb libc .Sh 書式 .In err.h .Ft void .Fn err "int eval" "const char *fmt" "..." .Ft void .Fn err_set_exit "void (*exitf)(int)" .Ft void .Fn err_set_file "void *vfp" .Ft void .Fn errc "int eval" "int code" "const char *fmt" "..." .Ft void .Fn errx "int eval" "const char *fmt" "..." .Ft void .Fn warn "const char *fmt" "..." .Ft void .Fn warnc "int code" "const char *fmt" "..." .Ft void .Fn warnx "const char *fmt" "..." .In stdarg.h .Ft void .Fn verr "int eval" "const char *fmt" "va_list args" .Ft void .Fn verrc "int eval" "int code" "const char *fmt" "va_list args" .Ft void .Fn verrx "int eval" "const char *fmt" "va_list args" .Ft void .Fn vwarn "const char *fmt" "va_list args" .Ft void .Fn vwarnc "int code" "const char *fmt" "va_list args" .Ft void .Fn vwarnx "const char *fmt" "va_list args" .Sh 解説 .Fn err 関数と .Fn warn 関数のファミリは、標準エラー出力、または .Fn err_set_file 関数を使用して指定した別のファイル上にフォーマット済みの エラーメッセージを表示します。 すべての場合に、プログラム名の最後のコンポーネント、コロンキャラクタ、 およびスペースが出力されます。 .Fa fmt 引数が NULL でない場合、 .Xr printf 3 のようなフォーマット済みのエラーメッセージが出力されます。 出力の最後には改行文字が付きます。 .Pp .Fn err , .Fn errc , .Fn verr , .Fn verrc , .Fn warn , .Fn warnc , .Fn vwarn , .Fn vwarnc の関数は、code または大域変数 .Va errno に基くエラーメッセージを、前にコロンと空白を付けて、付加します。 ただし、 .Fa fmt 引数が .Dv NULL の場合は例外です。 .Pp .Fn errc , .Fn verrc , .Fn warnc , および .Fn vwarnc の各関数の場合、 .Va code 引数がエラーメッセージの検索に使用されます。 .Pp .Fn err , .Fn verr , .Fn warn , および .Fn vwarn の各関数は、 グローバル変数 .Va errno を使用してエラーメッセージを検索します。 .Pp .Fn errx 関数および .Fn warnx 関数は、エラーメッセージを追加しません。 .Pp .Fn err , .Fn verr , .Fn errc , .Fn verrc , .Fn errx , および .Fn verrx の各関数は、 戻りませんが、引数 .Fa eval の値で終了します。 .Fn err_set_exit 関数を使用して、 .Xr exit 3 の前に呼び出される関数を指定して、必要なクリーンアップを 実行できます。 .Va exitf 用に NULL 関数ポインタを割り当てると、フックが 何もしないようにリセットされます。 関数は、他の関数が使用する出力ストリームを設定します。 .Fa vfp 引数は、開いているストリーム (既に void * に変換されているかもしれません) か、NULL ポインタです (この場合出力ストリームは標準エラーに設定されます)。 .Sh 例 現在の errno 情報を表示し終了します。 .Bd -literal -offset indent if ((p = malloc(size)) == NULL) err(1, NULL); if ((fd = open(file_name, O_RDONLY, 0)) == -1) err(1, "%s", file_name); .Ed .Pp エラーメッセージを表示して終了します。 .Bd -literal -offset indent if (tm.tm_hour < START_TIME) errx(1, "too early, wait until %s", start_time_string); .Ed .Pp エラーの警告 .Bd -literal -offset indent 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); .Ed .Pp グローバル変数 .Va errno を使用しないエラーの警告 .Bd -literal -offset indent error = my_function(); /* returns a value from */ if (error != 0) warnc(error, "my_function"); .Ed .Sh 関連項目 .Xr exit 3 , .Xr printf 3 , .Xr strerror 3 .Pp .Sh 歴史 .Fn err 関数と .Fn warn 関数は最初に .Bx 4.4 で現れました。 .Fn err_set_exit 関数 .Fn err_set_file 関数は最初に .Fx 2.1 で現れました。 .Fn errc 関数と .Fn warnc 関数は最初に .Fx 3.0 で現れました。