Unix错误处理

本文详细介绍了Unix系统中错误处理的方法,包括strerror和perror函数的使用,以及常见的错误码如EAGAIN、EWOULDBLOCK和EINTR的含义和处理策略。当系统函数返回错误时,errno会被设置为特定值,开发者可以据此获取错误信息并进行恢复操作。对于非致命错误,通常采用重试机制来应对。
摘要由CSDN通过智能技术生成

博客搬家,原地址:https://langzi989.github.io/2017/05/22/Unix错误处理/

当Unix系统函数出错的时候,通常会返回一个负值,同时整型变量errno通常被设置为具有特定信息的值。例如当使用open打开文件的时候,若当前文件不存在,此时open的返回值为-1,errno被设置为2(ENOENT)。
系统函数出错的返回值不一定为负数,是根据具体函数具体定义的,如当系统函数返回一个指针时,若出错,将会返回NULL。

Linux系统中errno.h中定义了一系列的错误宏,他们之处了不同错误对应的错误ID,为整型变量,可被赋值。

关于errno需要注意的两点:

  • 如果没出错,errno将不会被进程设置,所以一般当利用函数返回值确认已经出错的时候,再去查看相应的errno
  • 任何函数不会讲errno的值设置为0,而且在errno.h中定义的所有宏定义都不为0

Unix错误处理的两个相关函数

strerror函数

函数原型
#include <string.h>

char* strerror(int errno);
函数功能

此函数的功能为将errno转化为其对应的具体错误信息。

示例代码
#include <stdio.h>
#include <errno.h>
#include <string.h>

int main() {
   
   int fd = open("data");

   if (fd == -1) {
   
       printf("%s", strerror(errno));
   }
}

perror函数

函数原型
#include <stdio.h>
void perror(const char* msg);
函数功能

perror基于当前errno的值,在标准错误流上输出一个出错信息。输出内容首先输出msg所指的字符串,然后一个冒号,空格

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值