c - 返回 "ENOTDIR"、 "EBUSY"等字符串的函数?

标签 c error-handling runtime-error

strerror() 函数返回简短的错误描述,将错误编号作为参数。例如,如果参数为ENOTDIR,则返回“Not a directory”,如果参数为EBUSY,则返回“Device or resource busy”等。

但是,是否有一个函数为参数等于 ENOTDIR 返回“ENOTDIR”,为参数 EBUSY 等返回“EBUSY”?

我只是想避免为此目的编写一个巨大的 switch 语句。

最佳答案

否 - 没有提供此功能的标准或常用的非标准函数。

一种方法是编写一个巨大的 switch 语句,但这可能不是您采用的最佳方法。 errno 的大多数值未由任何标准指定,因此它们的值在不同操作系统甚至同一操作系统的不同版本中可能一致也可能不一致。

另外,后端会很痛苦。

如果可以接受一些运行时开销,一种更优雅的方法是编写一个函数,在这些错误代码发生时查找这些错误代码,而不是将这些值硬编码到一个大表中。 GNU/Linux 系统有一个所有可能的 errno 值的列表:

/usr/include/asm-generic/errno-base.h
/usr/include/asm-generic/errno.h

这些文件提供了每个 errno 值的 #define 以及它们的值和相邻注释中的简短描述。逐行搜索这些文件并打印出匹配的错误代码是非常简单的。即使没有,这些文件也是您编写大型 switch 语句的起点。

请注意,内核在传递给用户空间时可能会否定这些值。

关于c - 返回 "ENOTDIR"、 "EBUSY"等字符串的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39480661/

相关文章:

c - 链表节点的大小

c - 应该包含什么库才能使用 TransparentBlt?

c# - 属性或索引器不能作为 out 或 ref 参数传递

python - 在终端中运行任何依赖于 python 的命令/程序时出错

model - Laravel 5.0,无法重新声明类 App\models\Category

c - 将数组存储在Heap(C)中

c - 在常规 C 中非法多态属性的方法?

actionscript-3 - 未处理的套接字安全错误,即使(貌似)对其进行处理

laravel - laravel无法更新数据库并获得错误MethodNotAllowedHttpException

vba - 运行时错误 '13' : type mismatch VBA 2010 to ensure uppercase text in cell