意气风发.  perror 错误代码查看工具

           在mysql
的行使进程中,可能会现出精彩纷呈的error。这几个error有个别是出于操作系统引起的,举例文件只怕目录荒诞不经等等,使用perror的效果正是演说那么些错误代码的详实含义。 
perror 使用方法如下:

*       home88一必发 1
*

    比方:钦点错误号30和60分级是指什么错误
      home88一必发 2
    在MYSQL系统现身故障或错误后,日常客户都会去看错误日志,而不当日志里平常都会发觉这样的不当编号。那时大家就足以采纳那几个命令解析到底是哪里出标题了。

glibc_error reporting,glibc_error

  比超多GNU
CCurry的函数都会侦测并告诉错误条件。我们的顺序要求检查评定那一个错误条件。比方:我们展开三个输入文件时索要看清该文件是不是精确的开荒。若无科学张开,大家须求打字与印刷错误只怕采纳任何科学的措施。为了接纳这种错误报告机制,大家供给富含头文件errno.h

二 总结

       在头里几章中讲到了常用的多少个工具,其实还可能有像replace
(sql文本字符替换工具),那些未来用的时候在翻看表明。
mysqlimport(数据导入工具)后续会在讲到。mysqlhotcopy(MyISAM表热备份工具)那个只针对MyISAM存款和储蓄引擎的表,就不在表明。最终熟习运用那一个工具,将会带给不小方便。

检查评定错误:

  超多库函数都会回来二个分外的值来彰显函数运转出错。多如牛毛的特别值有:-1、空指针、EOF常量。但是那一个重临值只可以告诉你有错误爆发,但不会告知您错误是怎么。倘若你想驾驭不当是怎么着,就得靠错误代码,错误代码存款和储蓄在变量errno中(在errno.h中有注解卡塔 尔(阿拉伯语:قطر‎

  errno变量富含了系统错误代码,其项目是volatile。该项目意味着其得以忽地被异步线程改造,编写翻译器从不要是其值。如果你在写实信号管理程序应当保留退换量的值并还原其值。

  errno的伊始值为0,遭遇错误时,errno绝无或者为0。但不曾错误的时候,errno也不肯定为0(库函数在中标运行时并不会纠正errno的值卡塔 尔(英语:State of Qatar)。所以,不要借助errno的值来决断错误是还是不是产生。正确的做法是为每一个函数做好文书档案,标记出错误代码的值对应的失实类型。那样调用战败时,你能够通过检查errno获取错误代码,然后查询函数文书档案获取错误详细情况。纵然你想博得某生机勃勃库函数的错误代码,最佳再次以前设置errno为0(只怕你还想先保存以下errno的值,然后便于复苏该值卡塔尔。

  每三个错误代码都有三个以E最初紧跟大写字母或数字的标志名,实际为定义在errno.h中的宏。当然不是有所的宏都定义在三个errno.h中(详细的能够和谐翻大器晚成翻头文件,注意不止独有三个errno.h,多个errno.h共同定义了全方位的宏卡塔尔

  错误代码的值常常为正数并且都不平等,但也可能有叁个分化:EWO本田CR-VLDBLOCK和EAGAIN的错误代码是平等的。除了EWO奥迪Q5LDBLOCK和EAGAIN,你能够使用switch语句来决断错误代码。但您不应当依靠于此,你唯大器晚成能够相信的正是文书档案。

  除了GNU/Hurd系统,大致具有的系统调用被传出一个不算指针时都会回来EFAULT。所以呢,glibc的函数库表明文书档案中每每会简单对EFAULT的讲授。

  大好多的错误代码宏名皆一览无余的好懂,假如实在不知其意可以查阅手册可能

~# man errno

此地差非常少提多少个宏:

Macro: int EDOM
    域错误,可以理解为定义域错误。主要用在数学函数中。如果数学函数的一个参数值不在函数定义域中,则会将errno设置为EDOM

Macro: int ERANGE
    范围错误,与上面的EDOM恰好相反。EDOM是定义域的话,ERANGER就是值域了。也多用于数学函数中。如果数学函数返回值超过了约定的返回,则会将errno设置为ERANGE

Macro: int EAGAIN
    资源暂时不可获得。这种错误可能是随机的,你再次运行的时候便好了。。。EWOULDBLOCK是EAGAIN的一个别名。

 

张冠李戴新闻:

  大家了解错误代码,但总认为查文书档案不便民。幸亏库文件给我们提供了不当音讯告知函数。那个函数能够告诉二个富有表达性的荒谬新闻。部分音讯告知函数大家能够团结定义消息格式。

  函数strerror和perror为每二个错误代码都提供了多少个正经的不当音讯。而变量program_invocation_short_name则足以一本万利获取程序的名字,告诉大家哪个程序出错。

多少个函数原型:

#include <string.h>
char * strerror(int errnum);
char *strerror_r(int errnum, char *buf, size_t n);

说明:  strerror和strerror_r八个函数大概。分化在于安全性,官方文档对strerror的笺注是MT-Unsafe
race:strerror,而strerror_r则为MT-Safe。strerror再次回到一个静态申请的字符串缓冲区,该缓冲区被全部线程分享。而strerror_r再次回到的是一个私家副本,并不被其他线程分享。其它那七个函数都有希望形成内部存储器溢出(静态申请的缓冲区卡塔尔国。固然strerror_r能够钦点字符串长度,但那长度是char
*buf的。这函数有七个再次来到值,二个施用reurn再次回到,还也是有三个是char
*buf。return再次回到的照样是几个静态缓冲区。

 

#include<stdio.h>
void perror(const char *message);

说明:  perror将error
message打字与印刷到正规错误输出中。借使您传进的参数是八个空指针,perror会依照errno打字与印刷错误信息。假设char
*message非空,perror会将message充当错误信息的前缀输出。perror得立刻调用,不然errno的值或者产生变化。

 

char *program_invocation_name; //等同于argv[0]
char *program_invocation_short_name //不包含目录名。

证实:  那多少个变量的初阶化工作由glibc库在还未有调用main函数此前履行。所以在非GNU库中,那八个变量不起成效,在骨子里代码中大家须求定义_GNU_SOURCE宏,告诉编写翻译器使用GNU库。

  以下五个函数在整个GNU project中行使拾分广阔。

void error(int status, int errnum, const char *format, ...);
void error_at_line(int status, int errnum, const char *fname, unsigned int lineno, const char *format, ...);

home88一必发,表明:  那五个函数的归来和status有关,纵然status是0,则正常格式化打印错误音信。全局变量error_message_count也会做自增操作。错误音信的格式如下:program_name:
format_string:
error_messager_for_errnon。借使status非零,那多个函数将调用exit
status,即以状态status退出(不会回去卡塔 尔(阿拉伯语:قطر‎。关于program_name:全局变量error_print_progname指向的函数决定了program_name的值。error_at_line函数有点非常:多了fname,lineno四个参数。错误新闻格式如下:program_name:fname:lineno format_string:
error_mesage_for_errnon。假设全局变量error_one_per_line棉被服装置为非零值,每少年老成行只会打印叁个荒诞消息。

  除了以上的失实消息函数,大家还会有以下多少个:那多少个函数首要用在BSD系统中,定义在头文件err.h中,在gnu系统中不引入使用。

void warn(const char *format, ...)
void vwarn(const char *format, va_list ap)
void warnx(const char *format, ...)
void vwarnx(const char *format, va_list ap)
void err(int status, const char *format, ...)
void verr(int status, const char *format, va_list ap)
void errx(int status, const char *format, ...)
void verrx(int status, const char *format, va_list ap)

诸君看官自行查看手册吧。just be a man!!!

reporting,glibc_error 比相当多GNU
CCurry的函数都会侦测并报告错误条件。大家的次序供给质量评定那一个不当条件。譬如:我们开荒三个输入文…

相关文章