linux 返回错误类型
时间: 2025-07-26 21:25:29 浏览: 14
<think>我们正在处理用户关于Linux系统常见错误代码和类型的查询。根据用户需求,我们需要列出并解释一些常见的Linux错误代码(通常定义在<errno.h>中)。这些错误代码在系统编程和调试中非常重要。
根据引用[2]提供的错误码列表,我们可以提取部分常见错误码进行解释。同时,结合一般知识,补充其他常见错误码。注意:错误码的具体数值可能因系统而异,但符号名称(如EPERM)是标准的。我们以常见的Linux系统(如Ubuntu)为例。常见错误代码及其解释:
1. **EPERM (1)- Operationnot permitted**试图执行需要特权的操作,但当前用户没有足够的权限。例如,普通用户修改系统文件。2.**ENOENT(2) -No suchfile ordirectory**文件或目录不存在。可能是路径错误,或文件已被删除。3.**ESRCH(3) -No suchprocess**指定的进程不存在。例如,向不存在的进程发送信号。4.**EINTR(4) -Interruptedsystem call**系统调用被信号中断。通常可以重新启动被中断的系统调用。5.**EIO (5)- Input/output error**输入输出错误。通常发生在硬件读写错误,如磁盘故障。
6. **ENXIO (6)- Nosuch deviceor address**设备不存在或地址错误。例如,访问一个不存在的设备文件。
7. **E2BIG(7) -Argument listtoo long**参数列表过长。在执行程序时,传递的参数(包括环境变量)超过系统限制。8.**ENOEXEC (8)- Execformat error**可执行文件格式错误。文件头无法识别,可能文件损坏或不是可执行文件。
9. **EBADF (9)- Badfile descriptor**无效的文件描述符。可能是文件描述符未打开,或已经关闭。10.**ECHILD (10)- Nochild processes**没有子进程。例如,调用`wait`但当前进程没有子进程。
11. **EAGAIN (11)- Resourcetemporarily unavailable**资源暂时不可用。在非阻塞操作中,如果操作会阻塞则返回此错误。通常可以重试。
12. **ENOMEM (12)- Cannotallocate memory**内存不足。系统无法分配所需的内存。
13. **EACCES (13)- Permissiondenied**权限不足。尝试访问没有权限的资源(文件、套接字等)。14.**EFAULT(14) -Bad address**错误的地址。传递的指针参数指向了进程无法访问的地址空间。
15. **EBUSY (16)- Deviceor resourcebusy**设备或资源忙。例如,尝试卸载一个正在使用的文件系统。
16. **EEXIST (17)- Fileexists**文件已存在。例如,创建已存在的文件(在不允许覆盖的情况下)。17.**ENOTDIR(20) -Not adirectory**不是目录。在需要目录的地方使用了非目录的文件。18.**EISDIR(21) -Is adirectory**是一个目录。尝试将目录作为普通文件操作(如写入)。19.**EINVAL(22) -Invalid argument**无效的参数。传递给系统调用的参数无效(例如,不支持的选项)。20.**ENFILE (23)- Toomany openfiles insystem**系统打开的文件过多。系统级别的文件描述符耗尽。21.**EMFILE (24)- Toomany openfiles**进程打开的文件过多。单个进程的文件描述符达到限制。
22. **EFBIG (27)- Filetoo large**文件过大。尝试创建超过系统限制的文件。
23. **ENOSPC (28)- Nospace lefton device**设备空间不足。磁盘或分区已满。
24. **EROFS(30) -Read-onlyfile system**只读文件系统。尝试在只读文件系统上写入。
25. **EMLINK (31)- Toomany links**链接过多。尝试创建超过文件系统允许的硬链接数。26.**EPIPE (32)- Brokenpipe**管道破裂。向没有读取端的管道写入数据。27.**EDOM (33)- Mathargument outof domainof function**数学参数超出函数定义域。例如,对负数求平方根。28.**ERANGE (34)- Mathresult notrepresentable**数学结果无法表示。例如,数值溢出。
29. **EDEADLK(35) -Resource deadlock avoided**避免死锁。系统检测到可能发生死锁而避免执行操作。30.**ENAMETOOLONG(36) -File nametoo long**文件名过长。超过文件系统允许的最大长度。
以上是部分常见的Linux错误代码。在编程中,我们可以通过`perror`函数或`strerror`函数将错误码转换为可读的字符串。在命令行中,可以使用`errno`命令(如果已安装)来查询错误码的含义。例如:```bash$errno2ENOENT2No suchfile ordirectory```
或者使用`perror`(需要安装MySQL客户端库,但通常系统自带):
```bash$ perror13OSerror code13:Permission denied```另外,在C程序中,可以使用`strerror`函数:```c#include<string.h>char *error_str= strerror(errno);```
引用[2]提供了部分错误码的列表,我们可以参考。但要注意,错误码的数量和具体值可能因系统版本而异。§§相关问题§§1.如何查看Linux系统中完整的错误代码列表?2.在C语言中如何处理系统调用返回的错误?3.如何修改进程的文件描述符限制?4.常见的文件权限错误(EACCES)有哪些解决方法?
5.如何调试“设备或资源忙”(EBUSY)错误?</think>### Linux 系统常见错误代码解释
Linux 系统错误代码(通常定义在 `<errno.h>` 头文件中)是系统调用失败时返回的标准错误标识。以下是常见错误代码及其解释:
1. **EPERM (1) - 操作不允许**
尝试执行需要特权的操作(如修改系统文件),但当前用户权限不足[^2]。
2. **ENOENT (2) - 文件或目录不存在**
访问不存在的路径(如 `open("non_exist.txt")`)或拼写错误[^2]。
3. **EIO (5) - 输入/输出错误**
底层硬件读写失败(如磁盘损坏、USB 设备异常断开)[^2]。
4. **ENOMEM (12) - 内存不足**
系统或进程无法分配所需内存(常见于大型程序或内存泄漏)[^2]。
5. **EACCES (13) - 权限不足**
用户无权访问资源(如普通用户修改 `/etc` 文件)[^2][^3]。
6. **EBUSY (16) - 设备或资源忙**
资源被占用(如卸载正在使用的磁盘分区)[^2]。
7. **EEXIST (17) - 文件已存在**
尝试创建已存在的文件(如 `mkdir` 重复目录)[^2]。
8. **ENOTDIR (20) - 非目录**
将文件误认为目录(如 `cd /etc/passwd`)[^2]。
9. **EINVAL (22) - 无效参数**
系统调用参数错误(如传递非法指针或数值)[^2]。
10. **ENOSPC (28) - 设备空间不足**
磁盘写满或 inode 耗尽(常见于日志文件暴增)[^2]。
11. **EROFS (30) - 只读文件系统**
尝试写入只读介质(如修改光盘内容或 `chattr +i` 文件)[^2]。
12. **EPIPE (32) - 管道破裂**
进程间通信异常(如向已关闭的管道写数据)[^2]。
13. **ENAMETOOLONG (36) - 文件名过长**
路径超过 `PATH_MAX` 限制(通常 4096 字节)[^2]。
---
### 调试技巧
- **查看错误描述**:
```bash
errno 13 # 显示 EACCES 的详细描述
```
- **C 语言获取错误**:
```c
#include <errno.h>
printf("Error: %s\n", strerror(errno));
```
- **日志分析**:
检查 `/var/log/syslog` 或 `journalctl -xe` 获取上下文信息[^1]。
---
阅读全文
相关推荐




















