简介

  • Linux POSIX 详解

Linux POSIX 详解

在 Linux POSIX 系统中,<errno.h> 头文件定义了 errno,这是一个特殊的全局变量,用于指示发生错误时的错误码。errno 提供了对发生错误的类型进行识别的机制。

以下是关于 <errno.h> 头文件和 errno 变量的详细解释:

功能

  • <errno.h> 头文件定义了一组可能的错误码,每个错误码对应一个特定的错误情况。
  • 当系统函数或库函数出现错误时,会设置 errno 变量,以表示特定类型的错误。

errno 变量

  • errno 是一个全局的 int 类型变量,存储了最近一次发生错误的错误码。
  • 错误码的值可以是 POSIX 定义的标准错误码,也可以是特定的系统错误码。

示例用法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <stdio.h>
#include <errno.h>
#include <string.h>

int main() {
    FILE *file = fopen("nonexistent_file.txt", "r");

    if (file == NULL) {
        printf("无法打开文件,错误码: %d\n", errno);

        // 使用 perror 打印出错误信息
        perror("fopen() 错误");

        // 根据错误码输出错误信息
        switch (errno) {
            case ENOENT:
                printf("文件不存在\n");
                break;
            case EACCES:
                printf("权限不足\n");
                break;
            default:
                printf("未知错误\n");
                break;
        }
    }

    return 0;
}

注意事项

  • 错误码的值在不同的系统中可能会有所不同,但 POSIX 标准定义了一组常见的错误码,通常在不同的系统中保持一致性。
  • 在检测系统调用或库函数是否失败后,可以通过检查 errno 变量来获取特定的错误码,以便对错误类型进行判断和处理。

<errno.h> 头文件中的 errno 变量是处理错误的重要机制,可以帮助程序员识别和处理在执行系统调用或库函数时发生的错误。

Linux POSIX 常用错误码

在 Linux POSIX 系统中,<errno.h> 头文件定义了一组常见的错误码,用于标识在系统调用或库函数执行过程中可能发生的各种错误情况。以下是一些常见的错误码及其含义:

  1. EACCES(13):权限不足,表示访问权限被拒绝。

  2. EEXIST(17):文件已存在,通常用于创建文件时,指定了一个已经存在的文件名。

  3. EINVAL(22):无效的参数,表示传递给函数的参数无效或不合法。

  4. ENOENT(2):文件或目录不存在,用于指示找不到指定的文件或路径。

  5. ENOMEM(12):内存不足,表示没有足够的内存可用。

  6. ENOSPC(28):空间不足,用于指示磁盘空间不足。

  7. EIO(5):输入/输出错误,表示发生了与设备或文件系统I/O相关的错误。

  8. EFAULT(14):地址错误,表示传递给函数的地址无效。

  9. EBADF(9):无效的文件描述符,用于表示传递给函数的文件描述符无效。

  10. EPIPE(32):管道破裂,表示尝试向一个已关闭的管道写入数据。

  11. EINTR(4):中断的系统调用,表示一个系统调用被中断。

  12. ETIMEDOUT(110):操作超时,指示操作超出了预定的时间限制。

这些错误码代表了可能在程序执行中遇到的常见错误情况。当系统调用或库函数返回一个失败状态时,通过检查 errno 变量并根据相应的错误码进行处理,可以更好地识别和解决程序中的问题。