开发进阶篇系列

后生可畏.  perror 错误代码查看工具

           在mysql
的选取进程中,大概相会世多姿多彩的error。那个error有个别是出于操作系统引起的,比如文件或许目录不设有等等,使用perror的效用正是分解这一个错误代码的详实含义。 
perror 使用方法如下:

*       图片 1
*

    举个例子:钦定错误号30和伍16个别是指什么错误
      图片 2
    在MYSQL系统出现故障或错误后,日常客户都会去看错误日志,而不当日志里平时都会发觉这么的谬误编号。这时候我们就足以行使那一个命令剖判到底是何地出标题了。

glibc_error reporting,glibc_error

  超多GNU
CCurry的函数都会侦测并报告错误条件。大家的次第供给检验那一个错误条件。譬如:大家开发三个输入文件时须要看清该公文是还是不是正确的开采。若无科学张开,大家需求打字与印刷错误可能利用其余科学的办法。为了选用这种错误报告机制,大家须求包蕴头文件errno.h

二 总结

       在前方几章中讲到了常用的多少个工具,其实还大概有像replace
(sql文本字符替换工具),那一个以往用的时候在查看表明。
mysqlimport(数据导入工具)后续会在讲到。mysqlhotcopy(MyISAM表热备份工具)那几个只针对MyISAM存款和储蓄引擎的表,就不在表明。末了纯熟应用那几个工具,将会推动不小方便。

检查测验错误:

  非常多库函数都会回来一个特别的值来显示函数运转出错。不足为道的非常值有:-1、空指针、EOF常量。不过那些再次来到值只好告诉你有荒唐产生,但不会告知你错误是什么样。假如您想清楚不当是怎么着,就得靠错误代码,错误代码存款和储蓄在变量errno中(在errno.h中有扬言卡塔 尔(英语:State of Qatar)

  errno变量包括了系统错误代码,其品种是volatile。该品种意味着其能够猝然被异步线程改动,编写翻译器从不假诺其值。假如您在写信号管理程序应当保留退换量的值并还原其值。

  errno的伊始值为0,碰到错误时,errno绝无可能为0。但从对的误的时候,errno也不明确为0(库函数在成功运维时并不会纠正errno的值卡塔尔国。所以,不要依附errno的值来判别错误是或不是发生。准确的做法是为每三个函数做好文书档案,标明出错误代码的值对应的大谬不然类型。那样调用失利时,你能够因此检查errno获取错误代码,然后查询函数文书档案获取错误详细情形。倘若你想获得某风度翩翩库函数的错误代码,最佳再次此前安装errno为0(或者你还想先保存以下errno的值,然后便于苏醒该值卡塔 尔(英语:State of Qatar)。

  每三个错误代码都有五个以E最早紧跟大写字母或数字的号子名,实际为定义在errno.h中的宏。当然不是独具的宏都定义在两个errno.h中(详细的能够和谐翻大器晚成翻头文件,注意不仅唯有五个errno.h,多少个errno.h合营定义了全方位的宏卡塔 尔(阿拉伯语:قطر‎

  错误代码的值一般为正数并且都不均等,但也是有三个不等:EWOLANDLDBLOCK和EAGAIN的错误代码是同生龙活虎的。除了EWO奔驰G级LDBLOCK和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退出(不会回到卡塔尔国。关于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的函数都会侦测并报告错误条件。我们的次第须求检查测验这个不当条件。举例:大家开垦多少个输入文…

发表评论

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