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的值,需引入头文件

C语言错误代码errno_第1张图片

#include 
#include 

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——包含在头文件中

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

函数的简单使用:

 #include 
 #include 
  
 int main(void)
 {
     printf("errno5= %s\n", strerror(5));
     return 0;
 } 

2、perror——包含在头文件中

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

函数的简单使用:

#include 
#include 

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

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

    return 0;
}

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

你可能感兴趣的:(C语言)