在调用库函数或系统调用函数后,绝大多数情况下执行成功返回 0;如果执行失败则返
回-1,并对外部全局变量 error 赋值,以指示具体的错误情况。所有的错误代码都在 errno.h
文件中定义。以下是/usr/include/asm/errno.h 文件的部分内容。
come from /usr/include/asm/errno.h
#ifndef _I386_ERRNO_H
#define _I386_ERRNO_H
#define EPERM 1/* Operation not permitted */ //没有操作权限
#define ENOENT 2/* No such file or directory */ //文件和目录不存在
#define ESRCH 3/* No such process */ //没有此程序
#define EINTR 4/* Interrupted system call */ //系统调用中断
#define EIO 5/* I/O error */ //I/O 错误
……
为了打印出具体的 error 值所对应的错误提示信息,一般使用 perror 函数。此函数声明
//come from /usr/include/stdio.h
738 __BEGIN_NAMESPACE_STD
739 /* Print a message describing the meaning of the value of errno. // 打印错误值的
具体信息描述
740
741 This function is a possible cancellation point and therefore not
742 marked with __THROW. */
743 extern void perror (__const char *__s); //perror 函数声明
744 __END_NAMESPACE_STD
另外,Linux 系统还提供了以下错误处理函数:
#include //string.h 头文件中
char *strerror(int errnum); //strerror 函数声明
#include //errno.h 头文件中
extern char *sys_errlist[ ]; //sys_errlist 函数声明
extern int sys_nerr; //sys_nerr 函数声明
perror()可将语言相关的消息写入到标准错误输出,描述调用系统函数或库函数期间遇到
的最后一个错误。perror()首先输出参数字符串 s,后接冒号、空格、消息和换行符。为了发
挥它的最大作用,参数字符串应包括导致错误的程序的名称。错误编号取自符号 errno,出错
时将设置此符号,但执行无错误调用后不会清除此符号。消息的内容与将 errno 用作参数的
strerror()函数返回的内容相同。如果给定了一个 NULL 字符串,则 perror()函数只输出消息和
换行符。
perror()函数没有返回值。如果 errnum(sterror 函数的形参)消息编号有效,则 strerror()
将返回指向语言相关的消息字符串的指针。程序不应修改所指向的数组,而后续调用该函数
可覆盖该数组。如果有效的 errnum 消息编号不包括对应语言相关的消息,则 strerror()会将
errnum 用作要加入 sys_errlist 的索引,以获取消息字符串。如果 errnum 消息编号无效,则
strerror()将返回指向 NULL 字符串的指针。
为使各种形式的消息格式化,系统提供了 strerror() 函数和消息字符串数组 sys_errlist。strerror()
函数可将 errnum 中的错误编号映射为语言相关的错误消息字符串,同时返回指向该字符串的
指针。返回的消息字符串不带换行符。可将 errno 用作要加入 sys_errlist 的索引,以获取不带
换行符的未转换消息字符串。
另外,外部语言环境影响会对 perror 函数产生影响,环境变量 LANG 环境变量指定
strerror()和 perror()输出的消息的语言类型。如 果 语言相关的消息不可用,或者未设置 LANG,
或者将其设置为空字符串,则将使用与“C”语言关联的消息的缺省版本。
本文由 知识无忧网 首发,转载请保留此信息!