You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言如何借助errno等方式获取所有系统错误的总数量?

C 标准没有定义统一的系统错误总量常量,你提到的约130个是 Linux glibc 环境下的典型数值,下面是两种常用的实现方案:

方案1:使用glibc特有全局变量(Linux环境快速实现)

glibc 默认导出了全局变量 _sys_nerr,直接存储了当前系统预定义的系统错误总数量,配合 sys_errlist 数组还可以直接读取每个错误码的描述,示例代码如下:

#include <stdio.h>
extern int _sys_nerr;
extern const char *const sys_errlist[];

int main() {
    printf("系统错误总数量:%d\n", _sys_nerr);
    // 可选:遍历打印所有错误信息
    // for(int i=0; i<_sys_nerr; i++) {
    //     printf("%d: %s\n", i, sys_errlist[i]);
    // }
    return 0;
}

注意:_sys_nerr 和 sys_errlist 是 glibc 特有接口,POSIX 标准已标记为废弃,可移植性较差,仅适合 Linux 本地调试使用。

方案2:遍历校验法(跨平台兼容)

如果需要兼容不同 POSIX 系统,可以从0开始逐个校验错误码的有效性,统计有效错误的总数量:

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

int main() {
    int err_count = 0;
    // 遍历范围可以根据目标系统调整,Linux下一般到150足够覆盖所有定义
    for(int i=0; i<256; i++) {
        errno = 0;
        const char *err_str = strerror(i);
        // 排除未知错误,不同系统的未知错误提示可能略有不同,可按需调整判断条件
        if(errno != EINVAL && strstr(err_str, "Unknown") == NULL) {
            err_count++;
        }
    }
    printf("系统错误总数量:%d\n", err_count);
    return 0;
}

补充说明

  • 不同操作系统的错误码定义差异极大,Linux glibc 最新版本的错误总数在130~140之间,BSD、macOS等系统的错误总数更少,Windows平台的非POSIX错误码总数可达数千个。
  • 如果你需要统计的是POSIX标准强制要求的错误码数量,固定为50种左右,和系统自定义的扩展错误码无关。

内容的提问来源于stack exchange,提问作者janluk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 08:57:05