C语言错误代码errno

        errno 是记录系统的最后一次错误代码。代码是一个int型的值,在errno.h中定义。查看错误代码errno是调试程序的一个重要方法。当linux C api函数发生异常时,一般会将errno变量(需include errno.h)赋一个整数值,不同的值表示不同的含义,可以通过查看该值推测出错的原因。在实际编程中用这一招解决了不少原本看来莫名其妙的问题。

函数执行出错的原因有很多种,在C语言中定义了一个全局的整型变量errno来区分究竟发生了什么类型的错误;

在Linux系统中,可以使用man帮助查看errno的相关帮助文档
1、errno定义在errno.h文件中,该文件放在linux下的/usr/include/errno.h
注:值得注意的是,errno的错误值都不等于0,在C语言中0代表无错误

errno.h文件部分内容展示:

    #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 ENXIO 6 /* No such device or address */
  #define E2BIG 7 /* Argument list too long */
  #define ENOEXEC 8 /* Exec format error */
  #define EBADF 9 /* Bad file number */
  #define ECHILD 10 /* No child processes */
  #define EAGAIN 11 /* Try again */
  #define ENOMEM 12 /* Out of memory */
  #define EACCES 13 /* Permission denied */
  #define EFAULT 14 /* Bad address */
  #define ENOTBLK 15 /* Block device required */
  #define EBUSY 16 /* Device or resource busy */
  #define EEXIST 17 /* File exists */
  #define EXDEV 18 /* Cross-device link */
  #define ENODEV 19 /* No such device */
  #define ENOTDIR 20 /* Not a directory */
  #define EISDIR 21 /* Is a directory */
  #define EINVAL 22 /* Invalid argument */
  #define ENFILE 23 /* File table overflow */
  #define EMFILE 24 /* Too many open files */
  #define ENOTTY 25 /* Not a typewriter */
  #define ETXTBSY 26 /* Text file busy */
  #define EFBIG 27 /* File too large */
  #define ENOSPC 28 /* No space left on device */
  #define ESPIPE 29 /* Illegal seek */
  #define EROFS 30 /* Read-only file system */

一、想得到errno的值,需引入头文件<errno.h>

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

int main(void)
{
    printf("errno = %d\n", errno);
    if(fopen("any", "r") == NULL)
    {
        printf("errno = %d\n", errno);
    }
    
    return 0;
}

二、获得错误代码对应的错误信息

在C标准中定义了两个函数帮助打印输出errno的对应错误原因,一个是strerror,另一个是perror

1、strerror——包含在<string.h>头文件中

//函数原型
/*
*功能:将某个错误代码转换成对应的错误信息
*/
char *strerror(int errnuum);

函数的简单使用:

 #include <stdio.h>
 #include <string.h>
  
 int main(void)
 {
     printf("errno5= %s\n", strerror(5));
     return 0;
 } 

2、perror——包含在<stdio.h>头文件中

//函数原型
/*
*功能:根据error打印对应的错误信息
*参数:s: 用户自定义信息字符串,一般是出错的函数名
*/
void perror(const char *s);

函数的简单使用:

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

int main(void)
{
    printf("error = %d\n", errno);

    if(fopen("any", "r") == NULL)
    {
        perror("fopen");
    }

    return 0;
}

提示:在编写程序时,要注意适当地设置函数的返回值来指明函数执行是否成功,并在返回值前给出恰当的提示。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Star星屹程序设计

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

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

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

打赏作者

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

抵扣说明:

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

余额充值