开发进阶篇系列

生龙活虎.  perror 错误代码查看工具

           在mysql
的接受进度中,恐怕会并发美妙绝伦的error。这几个error有个别是由于操作系统引起的,比方文件也许目录不设有等等,使用perror的功效就是分解那个错误代码的详实含义。 
perror 使用办法如下:

*       图片 1
*

    举个例子:钦赐错误号30和60分头是指什么错误
      图片 2
    在MYSQL系统现身故障或不当后,日常客商都会去看错误日志,而不当日志里常常都会开采这么的荒诞编号。那时候大家就能够使用那些命令剖判到底是哪儿出难点了。

glibc_error reporting,glibc_error

  比比较多GNU
C库里的函数都会侦测并告知错误条件。我们的主次须求检查测量试验那么些错误条件。譬如:我们开采多少个输入文件时索要看清该公文是还是不是科学的张开。若无准确张开,大家须要打字与印刷错误大概利用别的科学的办法。为了利用这种错误报告机制,大家供给包罗头文件errno.h

二 总结

       在后面几章中讲到了常用的多少个工具,其实还恐怕有像replace
(sql文本字符替换工具),那一个未来用的时候在翻看表明。
mysqlimport(数据导入工具)后续会在讲到。mysqlhotcopy(MyISAM表热备份工具)那几个只针对MyISAM存款和储蓄引擎的表,就不在表达。末了熟识运用这一个工具,将会推动超大方便。

质量评定错误:

  相当多库函数都会回来一个相当的值来突显函数运维出错。不感觉奇的极其值有:-1、空指针、EOF常量。可是那么些重临值只能告诉你有错误发生,但不会告知您错误是怎么。假设你想知道不当是如何,就得靠错误代码,错误代码存款和储蓄在变量errno中(在errno.h中有扬言卡塔尔国

  errno变量饱含了系统错误代码,其项目是volatile。该项目意味着其得以猝然被异步线程改造,编写翻译器从不若是其值。借使你在写连续信号管理程序应当保留改动量的值并还原其值。

  errno的初叶值为0,境遇错误时,errno绝无大概为0。但并未有不当的时候,errno也不料定为0(库函数在成功运转时并不会修正errno的值卡塔 尔(阿拉伯语:قطر‎。所以,不要依附errno的值来决断错误是还是不是发生。精确的做法是为每一个函数做好文书档案,标明出错误代码的值对应的谬误类型。那样调用战败时,你能够经过检查errno获取错误代码,然后查询函数文书档案获取错误实际情况。假使你想获取某生龙活虎库函数的错误代码,最佳再度在此以前设置errno为0(大概你还想先保存以下errno的值,然后便于恢复生机该值卡塔 尔(阿拉伯语:قطر‎。

  每个错误代码都有叁个以E开首紧跟大写字母或数字的暗号名,实际为定义在errno.h中的宏。当然不是具有的宏都定义在一个errno.h中(详细的能够本人翻风姿浪漫翻头文件,注意不止唯有叁个errno.h,多个errno.h协作定义了百分百的宏)

  错误代码的值日常为正数何况都不等同,但也可以有四个分裂:EWO途睿欧LDBLOCK和EAGAIN的错误代码是生龙活虎致的。除了EWOTucsonLDBLOCK和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, ...);

证实:  那四个函数的回到和status有关,假如status是0,则不奇怪格式化打字与印刷错误消息。全局变量error_message_count也会做自增操作。错误音信的格式如下:program_name:
format_string:
error_messager_for_errnon。假若status非零,那三个函数将调用exit
status,即以状态status退出(不会回去卡塔 尔(英语:State of Qatar)。关于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的函数都会侦测并报告错误条件。我们的顺序供给检验那些不当条件。譬喻:大家开发七个输入文…

发表评论

电子邮件地址不会被公开。 必填项已用*标注