我正在研究lib,它使用了很多文件系统函数。
我想要的是,我的函数根据errno返回各种错误代码(而不仅仅是-1作为错误),以防文件系统函数失败。
虽然我可以直接使用errno值,但我希望在函数,错误代码和系统errno之间创建一些抽象层(例如,我的错误值从-1000开始,并且是负值,而errno值是正值)。
我的问题是什么是最好的实现方式。
现在我看到两种可能的解决方案:
typedef enum {
MY_ERROR_EPERM = -1104, /* Operation not permitted */
MY_ERROR_ENOENT = -1105, /* No such file or directory */
// ...
} MyReturnCodes_t;
int ErrnoToErrCode(unsigned int sysErrno) {
int error = ENOSYS;
switch(sysErrno) {
case EPERM: error = MY_ERROR_EPERM; break;
case ENOENT: error = MY_ERROR_ENOENT; break;
// ...
}
return error;
}
#define ERR_OFFSET -1000
typedef enum {
MY_ERROR_EPERM = ERR_OFFSET - EPERM, /* Operation not permitted */
MY_ERROR_ENOENT = ERR_OFFSET - ENOENT, /* No such file or directory */
MY_ERROR_ESRCH = ERR_OFFSET - ESRCH, /* No such process */
// ...
} MyReturnCodes_t;
哪种方式更恒定?
还有一点:这个库应该同时在QNX和Linux操作系统上使用,什么是正确的方法来对齐errno代码(在某些情况下不同)?
Id在专用函数中使用
#include <iostream>
#include <errno.h>
#include <map>
namespace MyError
{
enum MyReturnCode: int
{
MY_INVALID_VAL = 0 , /* Invalid Mapping */
MY_ERROR_EPERM = -1104, /* Operation not permitted */
MY_ERROR_ENOENT = -1105, /* No such file or directory */
};
MyReturnCode fromErrno(int e)
{
static const std::map<int, MyReturnCode> mapping {
{ EPERM, MY_ERROR_EPERM},
{ ENOENT, MY_ERROR_ENOENT}
};
if(mapping.count(e))
return mapping.at(e);
else
return MY_INVALID_VAL;
}
}
int main()
{
std::cout << MyError::fromErrno(ENOENT) << std::endl;
std::cout << MyError::fromErrno(42) << std::endl;
return 0;
}
http://coliru.staked-crooked.com/A/1DA9FD44D88FB097
我正在使用Pandoc将Rmarkdown文档转换为html文档。 在RStudio中本地运行时,这可以正常工作。但是当在文档化设置中运行时,编织部分似乎运行良好,但随后我收到了这个奇怪的错误消息。 我在pandoc手册中找不到关于这个退出代码7的任何信息。它似乎根本不存在。 它似乎产生了正确的md格式,但无法将其转换为html文档。 是否有人知道此代码以及发生了什么? 我个人认为这与Rdios调
问题内容: 好的,所以我有一个来自EEG扫描的数据文件(一个二进制文件,data.eeg),在matlab中,用于读取文件并绘制部分数据的代码如下所示: 这是我的“翻译”尝试 这就是让我感到困惑的地方。根据文档,matlab的fread是一种通过fread(loaded_file,size,data_type)读取二进制文件的方法。python中的替代方法是使用numpy的fromfile并使用内
问题内容: 我正在使用以下软件包:os / exec http://golang.org/pkg/os/exec/在操作系统中执行命令,但我似乎找不到获取退出代码的方法。我虽然可以阅读输出 即。 问题答案: 很容易确定退出代码是0还是其他。在第一种情况下,将返回nil(除非在设置管道时出现另一个错误)。 不幸的是,在错误的情况下,没有独立于平台的方法来获取退出代码。这也是它不属于API的原因。以下
问题内容: Web服务团队为我提供了此C#代码,该代码公开了一些我计划使用的Web服务。我的密码需要使用此代码进行加密,以便Web服务知道如何在其末尾对其进行解密。 我正在使用Java来使用此Web服务,现在,在将#C代码转换为Java代码时遇到问题,因为该Web服务无法正确解密我的密码。 这是我目前的失败尝试: 我做错什么了?非常感谢。 2013-08-07-更新 我在阅读此网站时,意识到我的模
我必须将下面的Java代码转换成一个UML图,但是我不确定是否正确地完成了类之间的关联。请你告诉我UML图是否正确。