我们需要打印错误或者采取其他正确的方式,不

作者: www.9159.com  发布:2019-08-31

一.  perror 错误代码查看工具

           在mysql 的运用进程中,大概会晤世五颜六色的error。那一个error某些是由于操作系统引起的,举例文件或许目录不设有等等,使用perror的功用正是解释这几个错误代码的详尽含义。  perror 使用方法如下:

*       www.9159.com 1
*

    比如:钦定错误号30和60分别是指什么错误
      www.9159.com 2
    在MYSQL系统出现故障或不当后,一般顾客都会去看错误日志,而不当日志里一般都会意识那样的错误编号。那时大家就足以行使那个命令深入分析到底是哪个地方出难题了。

检验错误:

  相当多库函数都会回去一个非常的值来体现函数运转出错。常见的独特值有:-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共同定义了百分之百的宏)

  错误代码的值一般为正数並且都不雷同,但也可以有一个见仁见智:EWOTiguanLDBLOCK和EAGAIN的错误代码是大同小异的。除了EWO奥迪Q7LDBLOCK和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!!!

转自:

检查测量检验错误:

  比较多库函数都会回去一个特种的值来体现函数运维出错。常见的例外值有:-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的错误代码是完全一样的。除了EWO奥德赛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的一个别名。

 

二 总结

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

错误音信:

  大家理解错误代码,但总认为查文档不便于。辛亏库文件给我们提供了错误音信告诉函数。那个函数能够告诉贰个负有表达性的错误新闻。部分音讯告诉函数大家能够团结定义新闻格式。

  函数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的函数都会侦测并报告错误条件。我们的次序须要检查评定这一个错误条件。譬如:大家开发三个输入文...

  非常多GNU CCurry的函数都会侦测并告知错误条件。大家的程序必要检查测量试验这么些错误条件。举个例子:大家开荒二个输入文件时索要决断该文件是还是不是正确的开垦。若无科学展开,我们要求打字与印刷错误只怕采取别的科学的章程。为了采用这种错误报告机制,大家须求满含头文件errno.h

  比较多GNU C库里的函数都会侦测并报告错误条件。我们的顺序供给检查实验那些错误条件。举例:大家开垦三个输入文件时索要看清该公文是还是不是科学的开荒。若无正确张开,大家要求打字与印刷错误只怕应用其余科学的措施。为了利用这种错误报告机制,大家供给包括头文件errno.h

glibc_error reporting,glibc_error

  比非常多GNU CCurry的函数都会侦测并告诉错误条件。大家的前后相继必要检查实验那个错误条件。比方:大家张开一个输入文件时索要看清该文件是或不是正确的开拓。若无科学展开,我们供给打印错误只怕选用任何科学的不二等秘书籍。为了利用这种错误报告机制,我们需求包罗头文件errno.h

检查实验错误:

  非常多库函数都会回来二个独特的值来展现函数运营出错。常见的特殊值有:-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陆风X8LDBLOCK和EAGAIN的错误代码是大同小异的。除了EWO讴歌MDXLDBLOCK和EAGAIN,你能够动用switch语句来判别错误代码。但你不应有借助于此,你独一能够信赖的正是文书档案。

  除了GNU/Hurd系统,大概全体的连串调用被盛传叁个无效指针时都会回去EFAULT。所以啊,glibc的函数库表明文书档案中一再会轻巧对EFAULT的演说。

  大好多的错误代码宏名都举世闻明的好懂,如若实在不知其意能够查看手册或然

~# man errno

此间差不离提多少个宏:

Macro: int EDOM    域错误,可以理解为定义域错误。主要用在数学函数中。如果数学函数的一个参数值不在函数定义域中,则会将errno设置为EDOMMacro: int ERANGE    范围错误,与上面的EDOM恰好相反。EDOM是定义域的话,ERANGER就是值域了。也多用于数学函数中。如果数学函数返回值超过了约定的返回,则会将errno设置为ERANGEMacro: 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_errnowww.9159.com,n。借使全局变量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!!!

转自:

本文由9159.com发布于www.9159.com,转载请注明出处:我们需要打印错误或者采取其他正确的方式,不

关键词: www.9159.com 9159.com