errno的用法

转载:http://www.dingguofeng.com/157

 

在C语言的标准库中,提供了一些变量和功能函数给用户进行错误处理。先来看一个变量:

int errno ;
//这是个错误代码变量,由调用失败的系统函数设置

当一个系统调用或着库函数的调用失败时,将会重置错误代码errno。用户在判断程序出错后,立即检验errno的值可以获取错误代码和错误信息。
例如,我们用fopen()的只读方式打开文件,如果文件不存在,函数返回NULL值。通过对返回值的检查,知道函数已经发生错误。此时,errno的值已经被系统设置为某个数值,这个数值就是错误代码。可以使用printf(“%d” ,errno);的方式来输出和告诉用户错误代码的值。
但是,有了代码以后,我们是怎么通过代码来知道具体的错误信息呢?
在系统中,有一个错误信息表,原型如下:

const char* sys_errlist[];
//错误信息表 , 由系统设置
int sys_nerr;
//错误信息表的项目总数,由系统设置。

其实这个表就是个字符串表,可以根据这个表,找到与错误代码相对应的信息。
其实,用户不能直接去使用sys_errlist 这个变量,但是可以间接使用他们,再来看两个函数:

void perror( const char* string );
//把string 字符串输出到标准错误输出上,并追加最后一次系统函数调用的错误信息。
char* strerror( int code );
//返回由参数 code 指定的错误信息。

perror是全自动的把错误信息和用户指定要输出的字符串 string直接输出到标准错误输出上 。
strerror()是根据给定的错误代码来返回字符串形式的错误信息,这就是对sys_errlist[]的间接使用。
现在我们可以做个实验,通过 code 来循环给定全部错误代码,让函数strerror()输出所有的错误信息:

/*
	test_error_message
*/
#include <stdio.h>
#include <string.h>
#include <errno.h>
int main( int argc , char* argv[]){
	//code 从0开始
	int code = 0;
	//sys_nerr由系统指定,不同的环境可能值不一样,我的环境值为43。
	while( code < sys_nerr )
	{
		printf("%d : %s \n" , code , strerror( code ) );
		code ++;
	}
	return 0;
}

C语言中,在实际编程,通常使用perror()来输出错误信息,用strerror()来获取信息。而errno是在当系统调用失败时,将会被设置。所以用户只要检查系统函数是否有错误,如果有错,就可以使用errno来获取错误代码了,然后用strerror()来返回错误代码指定的错误信息。
PS:以下是变量和函数的相关头文件
errno 的头文件为 errno.h
strerror() 头文件为 string.h
perror() 头文件为 stdio.h

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值