C 标准库 - <errno.h>详解

简介: `<errno.h>` 是 C 标准库中的错误处理头文件,定义了全局变量 `errno` 和一系列错误代码宏,如 `ENOMEM`(内存不足)、`EINVAL`(无效参数)等,用于检测和处理函数调用中的错误。在调用可能引发错误的函数前后应检查和清零 `errno` 以准确识别错误原因。

<errno.h> 是 C 标准库中用于错误处理的头文件,它定义了一个全局变量 errno 以及一些宏,允许程序检测和处理错误条件。

主要内容

  1. errno 变量

    • errno 是一个全局变量,用于指示最后一次函数调用的错误代码。它的类型通常是 int
    • 该变量只有在某些标准函数执行失败时才会被设置,成功的话,其值通常不变化。
  2. 错误代码宏

    • <errno.h> 中定义了一系列错误代码的宏,它们代表不同类型的错误。常见的包括:
      • ENOMEM:内存不足
      • EINVAL:无效的参数
      • EIO:输入/输出错误
      • ENOMEM:内存不足
      • EACCES:权限被拒绝
      • ENOENT:没有这样的文件或目录
      • EBADF:坏的文件描述符
      • EEXIST:文件已存在
      • ENOSPC:设备没有足够的空间
  3. 使用方式

    • 在调用可能会设置 errno 的函数后,通常应该先将 errno 初始化为 0,然后检查返回值。如果返回值指示错误(通常是负数或特定值),可以查看 errno 的值来确定错误原因。

示例代码

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

int main() {
   
    FILE *file = fopen("non_existent_file.txt", "r");
    if (file == NULL) {
   
        // 输出错误信息
        printf("Error opening file: %s\n", strerror(errno));
        return EXIT_FAILURE;
    }

    // 其他代码

    fclose(file);
    return EXIT_SUCCESS;
}

注意事项

  1. 多线程环境:在多线程程序中,errno 变量是线程可见的,但其值不是线程安全的。在多线程中,每个线程的 errno 各自独立。

  2. 调用顺序errno 在每次函数调用之后可能会被修改,所以在检查它的值之前应该要有一个明确的错误发生的调用。

  3. 清零:使用 errno 时建议在调用函数之前将其清零,以便能正确判断出错误发生前的状态。

  4. 别名列表:不同的实现可能会定义不同的错误号,但通常遵循 POSIX 标准。要了解特定系统的实现,参考该系统的文档。

通过合理使用 <errno.h>,可以高效地处理 C 程序中的错误。

相关文章
|
4月前
|
安全
C 标准库 - <signal.h> 详解
`&lt;signal.h&gt;` 是 C 标准库中的头文件,提供信号处理功能,用于通知程序特定事件,如非法操作或定时器到期。它定义了多种信号常量(如 `SIGINT`、`SIGTERM`、`SIGKILL`、`SIGSEGV`、`SIGUSR1` 和 `SIGUSR2`),并允许通过 `signal()` 或 `sigaction()` 设置信号处理函数。
|
8月前
C标准库 - <assert.h>
C标准库 - <assert.h>。
47 1
|
3月前
|
存储 C语言
C 标准库 - <stdlib.h>详解
`&lt;stdlib.h&gt;` 是 C 语言标准库中的头文件,提供了多种工具和函数,涵盖内存管理、进程控制、转换及随机数生成等功能。其中包括 `malloc`、`calloc` 和 `free` 等内存管理函数,`atoi` 和 `atof` 等转换函数,以及 `rand` 和 `srand` 等随机数生成函数。此外,还提供了 `exit` 和 `atexit` 等程序控制函数,以及 `getenv` 和 `system` 等环境控制函数。
394 11
|
4月前
|
程序员 C++
C 标准库 - <setjmp.h>详解
`&lt;setjmp.h&gt;` 是 C 标准库中的头文件,用于处理程序的非局部跳转。它提供了 `setjmp` 和 `longjmp` 函数,允许程序保存和恢复执行状态,适用于错误处理和复杂控制流(如协程)。主要概念包括跳转和上下文保存。使用时需注意局部变量作用域、不对称性及避免滥用。
74 11
|
4月前
|
开发者
C 标准库 - <stdio.h>详解
`&lt;stdio.h&gt;` 是 C 标准库中用于处理输入和输出(I/O)的头文件,提供了多种功能,如格式化输入输出、文件操作等。
|
7月前
|
存储 程序员 C语言
C 标准库 - <errno.h>
C 标准库 - <errno.h>
|
7月前
|
存储 程序员
C 标准库 - <stdlib.h>
C 标准库 - <stdlib.h>
|
7月前
|
存储
C 标准库 - <stdio.h> 详解1
C 标准库 - <stdio.h> 详解
226 0
|
8月前
errno.h 头文件
【2月更文挑战第18天】errno.h 头文件。
55 1