相关疑难解决方法(0)

将errno.h错误值转换为Win32 GetLastError()等效项

我正在写一个之间的层POSIX文件系统,和Windows使用杜坎,并且需要误差值转换的错误号样(EINVAL,ENOENT,等),在Win32等效打电话时你会收到GetLastError()(比如ERROR_INVALID_PARAMETER).

是否有可用于执行这些转换的现有功能,库或参考?

我通常会在Python源代码中寻找灵感来解决这些问题,但Python巧妙地避免了这种需求(至少就我所知).

作为一个例子,EINVAL (22)将转换为ERROR_INVALID_PARAMETER (87).

c++ winapi posix errno dokan

10
推荐指数
2
解决办法
4896
查看次数

如何在Linux中表示成功状态代码

Windows有不同类型的状态码,HRESULT以及NTSTATUS例如,允许用于表示成功和失败的值。这样就可以使用FAILED和这样的宏NT_SUCCESS。成功状态代码的一个示例是STATUS_PENDING指示IO尚未完成。

我正在尝试在Linux中映射相似的样式状态代码。我有一个(WIP)跨平台库,该库在Windows上使用上述类型的状态代码(用户模式和内核模式)。我有包装上述宏的“ FAILED”宏。对于这一切,我都需要一个等效的Linux。

我环顾四周,没有发现任何有趣/有帮助的地方。对于可能返回并出错的任何系统/平台功能(套接字,线程,锁),我需要确保将其转换为适当的状态码类型。Windows在这类事情上有很多帮助者,但是我不确定Linux。

伪代码示例:

MY_STATUS SendAsync(...) {
   ASYNC_OPERATION* Operation = MY_ALLOC(...)
   if (Operation == NULL) {
       return MY_OUT_OF_MEMORY_ERROR; // Error status
   }
   // Build the operation
   MY_STATUS Status = QueueOperation(Operation);
   if (MY_FAILED(Status)) {
       return Status;
   }
   return MY_STATUS_PENDING; // Success status
}
Run Code Online (Sandbox Code Playgroud)

然后,调用方应该可以具有以下代码:

MY_STATUS Status = SendAsync(...)
if (MY_FAILED(Status)) {
   // Bail
}
// Handle success
Run Code Online (Sandbox Code Playgroud)

我认为问题的症结在于,我不知道如何将系统/平台函数调用中的状态代码填充到支持成功/失败的通用类型中。通常,看起来所有状态代码都是肯定的,所以我只能说我的成功错误代码是<= 0。但是我不确定这是否是一个很好的解决方案。

需要明确的是,由于有人提出这个问题可能是答案,所以我并没有试图将Linux状态/错误代码强制HRESULT明确地格式化。我只是试图找到一种将错误代码表示为成功或失败的方法。如果我必须一路转换系统错误代码(否定它们?),那是可以接受的。如果没有真正解决此问题的方法,那将是一个可以接受的答案(尽管不希望如此),我将不得不寻找一些解决方法。

c linux cross-platform

5
推荐指数
1
解决办法
72
查看次数

标签 统计

c ×1

c++ ×1

cross-platform ×1

dokan ×1

errno ×1

linux ×1

posix ×1

winapi ×1