c - C 包装器到 errno
问题描述
我已经编写了用于包装 errno 的函数,但是我编译错误:错误:未声明“EACCES”(在此函数中首次使用)案例 EACCES:我做错了什么?如何用 switch-case 包装 errno?status_t 定义为相关错误的枚举。
static status_t GetErrorStatus (int errno_value)
{
status_t err_status = COMMON_ERROR;
switch (errno_value)
{
case EACCES:
err_status = NO_ACCESS_PERMISSION;
break;
case EPERM:
err_status = NO_ACCESS_PERMISSION;
break;
case EIDRM:
err_status = SEMAPHORE_REMOVED;
break;
case ENOENT:
err_status = FILE_DOESNT_EXIST;
break;
case EEXIST:
err_status = SEMAPHORE_ALREADY_EXISTS;
break;
default: err_status = COMMON_ERROR;
}
return (err_status);
}
解决方案
如何
errno
用开关盒包装?
并非所有平台都支持各种错误。C 仅指定 3: EDOM EILSEQ ERANGE
in<errno.h>
并且重要的是,它们是宏。我希望其他平台特定的错误也可以如此测试。
switch (errno_value)
{
#ifdef EACCES
case EACCES:
err_status = NO_ACCESS_PERMISSION;
break;
#endif
#ifdef EPERM
case EPERM:
err_status = NO_ACCESS_PERMISSION;
break;
#endif
...
推荐阅读
- asp.net-core-2.0 - 如何在本地主机中为 nopcommerce 4.0 设置多商店?(.net 核心)
- reactjs - 反应 activeClassName 重复
- node.js - Hyperledger Fabric 在 shim.Error() 中返回 json
- mongodb - 显示存储在 mongodb 上的图像文件
- api - 生成 AR-JWT 令牌
- css - 表格行集成
- c++ - 从输入流中读取数据时如何清除故障位?
- scala - 写入 HDFS - hive 时,如何控制 Spark 流中的行数和/或输出文件大小?
- apache-kafka - Kafka Manager 无法连接到代理
- youtube-api - GTM预览模式下没有GTM.video