前言
本文章主要描述Linux内核常用错误码,用于查找大概错误类型。
常用错误码
错误码 | 名称 | 含义 |
---|---|---|
0 | SUCCESS | 操作成功 |
-1 | EPERM | 操作不允许(Operation not permitted) |
-2 | ENOENT | 没有那个文件或目录(No such file or directory) |
-3 | ESRCH | 没有那个进程(No such process) |
-4 | EINTR | 被信号中断(Interrupted system call) |
-5 | EIO | 输入/输出错误(Input/output error) |
-6 | ENXIO | 设备或地址不存在(No such device or address) |
-11 | EAGAIN | 资源暂时不可用(Resource temporarily unavailable),通常是非阻塞操作 |
-12 | ENOMEM | 内存不足(Out of memory) |
-13 | EACCES | 权限被拒绝(Permission denied) |
-14 | EFAULT | 坏地址(Bad address),通常用于指示系统调用或库函数在访问指针时遇到问题,尤其是当指针指向的内存地址无效或不可访问时。 |
-17 | EEXIST | 文件已存在(File exists) |
-22 | EINVAL | 无效参数(Invaild argument) |
-24 | EMFILE | 达到进程打开文件数的限制(Too many open files) |
-27 | ENOSPC | 设备上没有足够的空间(No space left on device) |
-30 | EROFS | 只读文件系统(Read-only file system) |
-38 | ENOSYS | 功能未实现(Function not implemented) |
-39 | EFBIG | 文件过大(File too large) |
-95 | OPNOTSUPP | 某个操作不被支持 |
处理错误码
在编程中,处理错误码通常涉及以下步骤:
检查返回值
在调用系统调用或库函数后,检查返回值是否为负数
获取错误码
如果返回值为负数,通常可以使用error变量来获取错误码
输出错误信息
可以使用perror函数或者strerror函数来输出更详细的错误信息
#include <stdio.h>
#include <stdlib.h>
#include <error.h>
#include <string.h>
int main() {
FILE *file = fopen("test.txt", "r");
if (!file) {
// 输出错误信息
printf("Error opening file: %s\n", strerror(errno));
return EXIT_FAILURE;
}
...
fclose(file);
return EXIT_SUCCESS;
}