error值说明

ECHILD

未给出的过程。

EAGAIN

不处理。 尝试创建新进程失败,因为没有处理槽,或者没有足够的内存,或者最大嵌套级别已到达。

E2BIG

太长的参数列表。

EACCES

权限被拒绝。 文件的权限集不允许指定的访问。 此错误指示尝试访问一个文件 (或者,在某些情况下,一个目录) 将与文件属性不兼容的方法。

例如,该错误,当尝试从不处于打开状态时的文件读取,打开要编写的现有只读文件,或打开目录而不是文件。 在 MS-DOS 操作系统版本 3.0 下及更高版本中, EACCES 还可以指示锁定的或共享的冲突。

该错误还可能生成用于写入文件或目录重命名或移除现有目录。

EBADF

文件号错误。 有两种原因:1) 中指定的文件描述符不是有效的值也不引用打开文件。 2) 尝试对进行只读访问或设备编写打开的文件。

EDEADLOCK

资源会发生死锁。 为算术函数的参数不在函数的字段。

EDOM

算术参数。

EEXIST

文件存在。 尝试创建已存在的文件。 例如, _O_CREAT 和 _O_EXCL 标志。 _open 指定调用,但是,名称文件已存在。

EILSEQ

非法字节序列 (例如,在 MBCS 字符串)。

EINVAL

无效参数。 无效值为之一传递给定函数。 例如,对于原点给定的值,在确定文件指针 (传递给 fseek的调用) 是文件的开头之前。

EMFILE

许多打开文件。 没有其他文件描述符不可用,因此,不能打开没有其他文件。

ENOENT

如果没有这样的文件或目录。 使用指定的文件或目录不存在或无法找到。 此消息会发生,只要已指定的文件不存在或路径的元素不指定某个现有目录。

ENOEXEC

exec 格式错误。 尝试执行不可执行文件或具有无效可执行 (pe) 文件格式的文件。

ENOMEM

没有足够的核心。 没有足够的内存为所尝试的运算符可用。 例如,此消息时,会发生内存不足可用于执行子进程时,或者,在 _getcwd 的分配请求调用时无法得到满足。

ENOSPC

在计算机预留的没有空格。 编写没有其他空间不在计算机 (例如,那么,当磁盘已满时)。

ERANGE

太大结果。 为算术函数的参数太大,从而部分或完全有效位丢失中的位数。 此错误在其他功能,也可能作为参数比预期大时 (例如,那么,当对 _getcwd 的 缓冲区 参数比预期长) 时。

EXDEV

跨模式链接。 尝试将文件移动到不同的计算机 (使用 重命名 函数)。

STRUNCATE

字符串复制或串联生成一个被截断的字符串。


<think>嗯,用户想了解Linux C编程中ERROR和OK的定义和使用。首先,我需要回忆一下Linux系统编程中的常见返回和错误处理机制。通常,在C语言中,函数通过返回整数来表示成功或失败,但具体的定义可能因不同的库或框架而异。 首先,POSIX标准规定,系统调用和库函数通常返回-1表示错误,并通过errno变量传递具体错误码。例如,open()函数成功时返回文件描述符,失败返回-1。这时候需要检查errno来确定具体错误原因。用户可能想知道这些标准的返回定义,比如ERROR通常被定义为-1,而OK可能是0,但需要确认具体上下文。 然后,考虑到用户提到的ERROR和OK可能不是POSIX标准的一部分,而是一些特定项目或库中的宏定义。比如在某些代码中,可能会看到类似#define OK 0和#define ERROR -1的宏,用于统一返回。这种情况下,函数返回OK表示成功,ERROR表示失败,并可能使用errno来存储错误码。需要举出实际的例子,比如在文件操作或内存分配中的使用。 另外,用户可能还需要了解如何正确使用这些返回。例如,每次系统调用后检查返回,处理错误情况,并正确使用perror或strerror来输出错误信息。这部分需要详细说明,并给出示例代码,帮助用户理解实际应用场景。 还需要注意,不同的库可能有不同的定义。例如,pthread库中的函数返回0表示成功,非零表示错误码,而errno可能不会被设置。这时候需要直接检查返回。这可能和用户的问题相关,需要指出不同情况下的处理方式。 最后,用户可能需要知道如何在自己的项目中定义和使用ERROR和OK,或者如何遵循现有的编程规范。因此,提供示例代码和最佳实践会很有帮助,比如在头文件中定义宏,并在函数中返回这些,同时处理错误情况。 总结下来,回答的结构应该是:首先解释标准的POSIX错误处理方式,然后讨论可能的宏定义,接着说明不同库的差异,最后给出使用示例和相关建议。同时,需要引用提供的参考内容,虽然参考是关于C++的const,但可能和错误处理中的常量定义有关联,可以适当提及。</think>在Linux C编程中,`ERROR`和`OK`的定义与使用通常与系统调用、库函数及项目规范相关。以下是详细说明: --- ### 1. **标准错误处理机制** Linux系统调用和标准C库函数普遍遵循以下模式: - **返回**:函数通过返回表示操作状态,例如: - 成功时返回非负数(如文件描述符、实际读写字节数) - 失败时返回`-1`,同时设置全局变量`errno`存储具体错误码 - **errno使用**:需包含头文件`<errno.h>`,错误码可通过`perror()`或`strerror()`转换为可读信息 示例代码: ```c #include <stdio.h> #include <errno.h> #include <string.h> int main() { FILE *fp = fopen("nonexistent.txt", "r"); if (fp == NULL) { printf("Error %d: %s\n", errno, strerror(errno)); // 输出错误描述 perror("fopen failed"); // 自动附加错误信息 return -1; } // 其他操作... return 0; } ``` --- ### 2. **自定义ERROR/OK宏** 在项目开发中,常通过宏定义统一返回: ```c #define OK 0 #define ERROR -1 ``` 典型应用场景: ```c int process_data() { if (/* 条件失败 */) { return ERROR; } // 正常处理 return OK; } ``` --- ### 3. **特殊库的返回规范** 不同库可能有独立定义: - **Pthread线程库**:返回`0`表示成功,非零直接表示错误码 ```c if (pthread_create(&tid, NULL, thread_func, NULL) != 0) { // 错误处理 } ``` - **GLib库**:使用`TRUE/FALSE`或`G_OK/G_ERROR`等宏 --- ### 4. **错误处理最佳实践** - 始终检查可能失败的函数返回 - 优先使用标准错误码(如`EINVAL`表示无效参数) - 封装错误处理逻辑: ```c #define CHECK_ERROR(cond, msg) \ if (cond) { \ fprintf(stderr, "Error: %s (Code %d)\n", msg, errno); \ goto cleanup; \ } ``` --- ### 相关问题 1. 如何自定义项目级的错误码枚举类型? 2. 在多线程编程中如何处理`errno`的线程安全性? 3. 系统调用和库函数返回的区别是什么?[^1] 4. 如何通过`strace`工具追踪系统调用的错误返回? [^1]: 类似C++中常量的定义规范,错误码通常被设计为不可修改的标识符,如`const int EACCES = 13`,但实际在C中通过宏或枚举实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值