ERROR - Linux手册页

时间:2019-08-20 18:00:12  来源:igfitidea点击:

Linux程序员手册 第3部分
更新日期: 2017-09-15

名称

error,error_at_line,error_message_count,error_one_per_line,error_print_progname-glibc错误报告功能

语法

#include <error.h>

void error(int status, int errnum, const char *format, ...);

void error_at_line(int status, int errnum, const char *filename,
                   unsigned int linenum, const char *format, ...);

extern unsigned int error_message_count;

extern int error_one_per_line;

extern void (*error_print_progname) (void);

说明

error()是常规的错误报告功能。它将刷新stdout,然后将程序名称,冒号和空格,由printf(3)样式格式字符串格式指定的消息输出到stderr,并且如果errnum为非零,则输出第二个冒号和一个空格,后跟空格。 strerror(errnum)给出的字符串。格式所需的任何参数都应遵循参数列表中的格式。输出以换行符终止。

error()打印的程序名称是全局变量program_invocation_name(3)的值。 program_invocation_name最初与main()的argv [0]具有相同的值。可以修改此变量的值以更改error()的输出。

如果status的值非零,则error()调用exit(3)以使用给定值作为退出状态终止程序。

error_at_line()函数与error()完全相同,只是添加了参数filename和linenum。产生的输出与error()相同,除了在写入程序名称之后:冒号,文件名的值,冒号和linenum的值。调用error_at_line()时,预处理器值__LINE__和__FILE__可能会很有用,但也可以使用其他值。例如,这些参数可以引用输入文件中的位置。

如果将全局变量error_one_per_line设置为非零,则具有相同filename和linenum值的一系列error_at_line()调用将导致仅输出一条消息(第一条)。

全局变量error_message_count对error()和error_at_line()输出的消息数进行计数。

如果为全局变量error_print_progname分配了函数的地址(即不为NULL),则将调用该函数,而不是在消息前加上程序名称和冒号。该函数应将合适的字符串打印到stderr。

属性

有关本节中使用的术语的说明,请参见attribute(7)。

InterfaceAttributeValue
error()Thread safetyMT-Safe locale
error_at_line()Thread safetyMT-Unsafe race: error_at_line/error_one_per_line locale

访问内部error_one_per_line变量(不进行任何形式的同步,但是由于它曾经是一个int,因此应该足够安全),并且如果error_one_per_line设置为非零,则内部静态变量(不向用户公开)用于保存最后一个打印的文件名和行号无需同步即可访问和修改;该更新不是原子更新,它发生在禁用取消之前,因此只有在修改两个变量之一之后才能中断更新。之后,error_at_line()非常类似于error()。

遵循规范

这些函数和变量是GNU扩展,不应在可移植的程序中使用。

另外参见

err(3),errno(3),exit(3),perror(3),program_invocation_name(3),strerror(3)

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/