操作系统错误处理

错误处理

1、通过函数的返回值表示执行错误:
//  返回合法值表示成功  返回非法值表示失败
//  计算大小、查找
long file_size(const char* path)
{
    FILE* fp = fopen(path,"r");
    if(NULL == fp)
        return -1;  //  返回非法值
    
    fseek(fp,SEEK_END,0);
    long size = ftell(fp);
    fclose(fp);
    return size;
}
​
//  返回指针类型 返回NULL/0xffffffff表示失败,malloc、mmap
Node* query_list(Node* head,TYPE data)
{
    for(Node* n=head->next; n; n=n->next)
    {
        if(n->data == data)
            return n;
    }
    return NULL;
}
​
//  返回0表示成功,非零表示失败 main、fseek
​
//  永远成功的函数,printf、menu菜单函数
2、通过errno全局变量表示错误:
  • errno是一个记录系统最后一次错误代码原因的全局变量,是int类型的值,需要导入头文件 <errno.h> 通过该全局变量的值查看和调试程序错误。

  • 当调用Linux系统API函数发生异常,一般系统会自动地将本程序的errno修改一个值,不同的值表示不同的异常,可以通过该值获取和推测出程序出现了什么问题,实际编程中能找出大部分调用系统API出现的异常

  • 一般errno在程序执行成功时不会被修改,但是毕竟是一个全局变量,可能被其他人或者操作失误而修改,因此不能以errno非零就断定程序出现了异常,只能先根据其他具体条件判断出程序出现异常后,才能使用errno来确定异常的原因

#include <stdio.h>
#include <string.h>
#include <errno.h>
​
int main(int argc,const char* argv[])
{
    FILE* fp = fopen("xixi","r");
    if(NULL == fp) 
    {   
        printf("fopen:%d\n",errno); 
        printf("fopen:%s\n",strerror(errno));
        printf("fopen:%m\n");
        perror("fopen");
    }     
    fclose(fp);
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值