C语言库函数 strerror perror 的使用

C语言库函数 strerror perror 的使用

1. strerror 的使用

写代码时需要判断函数返回值的状态,来做进一步的处理,提高程序的健壮性,比如打开一个文件出错,就要根据返回值做进一步的处理
例如下面的代码

	int fd = open("./error.c", O_RDONLY);
	if(-1 == fd){
		printf("open ./error.c error!\n");
		return 0;
	}

这段代码linux系统上使用系统函数open打开一个文件,如果文件不存在或其他的错误返回值就是个-1,就不能确定到底什么原因导致的错误。C库刚好提供了一个strerror 函数 ,需要#include <strerrno.h> 头文件,errno 是一个全局变量,直接使用,errno只是获取错误的值,需要结合strerror函数,解析出错误的原因。

int fd = open("./error.c", O_RDONLY);
	if(-1 == fd){
		printf("errno=%s\n",strerror(errno));
		printf("open ./error.c error!\n");
		return 0;
	}

当文件没有权限时,报如下错误

errno=Permission denied
open ./error.c error!

通过ls -al查看文件权限问题,的确是没有权限
ls error.c -al
--w--w---- 1 huangcheng huangcheng 0 Mar 21 12:19 error.c

errno一共有134个不同的值,下面列举部分

#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 */
......
#define ENOTRECOVERABLE 131 /* State not recoverable */
#define ERFKILL 132 /* Operation not possible due to RF-kill */
#define EHWPOISON 133 /* Memory page has hardware error */

2. perror的使用

perror 直接显示错误的原因,用于在发生系统调用错误时输出有关错误信息的描述,使用比较简单,直接来开示例代码,这个文件还是由于权限问题无法打开

int fd = open("./error.c", O_RDONLY);
	if(-1 == fd){
		//printf("errno=%s\n",strerror(errno));
		perror("perror:");
		printf("open ./error.c error!\n");
		return 0;
	}

和strerror使用效果一样

perror:: Permission denied
open ./error.c error!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值