C语言基础(十三)系统错误信息

系统错误信息

我们在写程序的时候需要调用C语言提供的库函数,并通过函数的返回值判断嗲用是否成功。其实在C语言中,还有一个全局变量errno,存放了函数调用过程中产生的错误代码。

为防止和长长的返回值混淆,库函数的调用一般并不直接返回错误码,而是将错误码存入名为errno的全局变量中,errno不同数值所代表的错误信心定义在<errno.h>中。如果库函数调用失败,可以通过独处errno的值来确定问题所在,推测程序出错的原因,这也是调试程序的一个重要方法。

配合strerror和perror两个库函数,还可以更方便的查看错误消息。

strerror在<string.h>中声明,用于获取错误码对应的消息描述。

perror在,stdio.h>中声明,用于在屏幕上最近一次系统错误码及其消息描述。在实际开发中,我们写的程序运行于后台,在屏幕上显示错误信息没有意义。

strerror库函数

函数声明:

char *strerror(int errno);
/*函数说明:strerror()用来依参数errno的错误代码来查询错误原因的描述字符串,然后将该字符串指针放回*/

 

使用方法:

#include<string.h>
#include<stdio.h>
#include<errno.h>
#include<unistd.h>


int main()
{
	if(remove("/home/zunnajim.txt")!=0)
	{
		printf("errno=%d\nstrerror=%s\n",errno,strerror(errno));
	}

}

 

运行结果:

errno=2
strerror=No such file or directory

errno的细节:

1.调用库函数不一定会设置errno

如果调用库函数失败,库函数会设置errno的值,但是并不是全部的库函数在调用失败时都会设置errno的值。

那么如何来查看函数是否设置了errno的值呢?在Linux终端中输入man  函数名称,在出现的信息当中,如果有以下文字说明,那么该库函数就是有设置errno的值。

 Upon successful completion fopen(), fdopen() and freopen() return a FILE pointer.  Otherwise, NULL is returned  and  errno  is  set  to
       indicate the error.

 2.errno不能作为库函数调用失败的标志

在C语言中,如果库函数被正确的执行,errno的值不会清空。换句话说,errno的值只有在一个库函数发生错误的时候才会被设置。当库函数调用正确时,errno的值不会被修改,当然也不会主动设置为0.正因为如此,在实际编程中,判断函数是否成功还得看函数的返回值,只有在函数的返回值失败的情况下,才需要关注errno的值。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黑暗守护者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值